Java之集合框架源码分析(第一篇:Collection接口)

(本文基于JDK1.8)

Collection.java定义在java.util包中

Collection接口定义与规范了作为一个集合类应该具备哪些基本能力(功能),Java集合框架的名称由来就跟Collection接口有关!

Collection继承了Iterable接口,Iterable接口则是定义了作为迭代器具备的能力

以下是Collection接口中定义的抽象方法与default方法

Java之集合框架源码分析(第一篇:Collection接口)_第1张图片

 

0、添加元素的方法

  • add:添加单个元素
  • addAll:添加多个元素

1、移除元素的方法

Java之集合框架源码分析(第一篇:Collection接口)_第2张图片

  • remove:移除匹配的元素对象
  • removeAll:移除多个匹配的元素对象
  • removeIf:移除集合中满足给定条件的所有元素(条件由Predicate对象传入)
  • clear:移除集合中所有元素
  • retainAll:移除传入集合中不包含的元素

2、检查集合状态

  • contains:检查集合中是否包含某一个元素
  • containsAll:检查集合中是否包含所有的元素
  • isEmpty:检查集合是否是空(没有持有元素)
  • size:检查集合的元素总数

 

3、遍历能力

  • 获得迭代器对象(Iterator对象)
  • spliterator(重写的Iterable接口)

4、转换能力

  • 转为Object数组对象
  • 转换为参数类型为T的数组对象

5、通用能力

  • equeals对象相等比较
  • hashCode返回对象hash码

6、默认能力

  •  

7、基本结构

public interface Collection extends Iterable {
         …………省略很多代码…………
}

Collection继承了Iterable

Collection为范型接口

官方介绍:Collection是集合层次结构中的根interface。一个Collection表示一组对象,每个对象称为元素。JDK不提供任何直接Collection接口的实现类,不过提供了更多的实现子类,具体子接口如Set、List。这个Collection接口通常用于定义所有Collection中的最大通用性功能!(注意:内容有删减,具体见源码)

 

8、作者

* @author  Josh Bloch
* @author  Neal Gafter

 

9、接下来看哪些源码?看看作者给的建议

 * @see     Set
 * @see     List
 * @see     Map
 * @see     SortedSet
 * @see     SortedMap
 * @see     HashSet
 * @see     TreeSet
 * @see     ArrayList
 * @see     LinkedList
 * @see     Vector
 * @see     Collections
 * @see     Arrays
 * @see     AbstractCollection

 

总结

a、Collection接口定义了作为集合类的基本框架(基本能力),显然它是高度抽象,仍然考虑的不够具体,所以后续的List、Set等接口都对Collection接口定义的能力进行了补充,这就是interface继承的作用

b、Collection接口缺少的能力:无法通过指定下标获得一个元素、无法通过指定值获得一个元素、再想想还有什么的欠缺的?是不是有太多……

c、假设我写一个类,它只实现了Collection的添加能力,那么我这个类一定就只能是抽象类,因为还有移除能力等等没有实现……这也是具体实现类与抽象类的最大区别!

d、优先使用接口定义基本能力,如果有一个类只实现了其中一部分的通用能力,这就是抽象类,后面会再有一个类继承抽象类,完成所有能力的实现,这就是具体的子类。举例说明:接口定义了5个抽象方法、抽象类实现了其中2个,省下3个由具体类继承抽象类来做实现

你可能感兴趣的:(Java,综合)