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

(本文基于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个由具体类继承抽象类来做实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值