(本文基于JDK1.8)
Collection.java定义在java.util包中
Collection接口定义与规范了作为一个集合类应该具备哪些基本能力(功能),Java集合框架的名称由来就跟Collection接口有关!
Collection继承了Iterable接口,Iterable接口则是定义了作为迭代器具备的能力
以下是Collection接口中定义的抽象方法与default方法
0、添加元素的方法
- add:添加单个元素
- addAll:添加多个元素
1、移除元素的方法
- 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<E> extends Iterable<E> {
…………省略很多代码…………
}
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个由具体类继承抽象类来做实现