collection是一个接口

Collection是所有java中“一组对象”,或者说集合都实现的接口,其父接口是Iterable。Collection的实现类有的可以容纳重复数据如LinkList, 有的不可如Bag,有的有序有的无序。但他们都不是直接实现了Collection而是实现了其子接口,如下图LinkedList就是实现了List和Queue(Deque)等接口。

JDK源码阅读笔记1 Collection

两个构造器 无参和有参

一般来讲,Collection的实现类均应实现两个“标准”构造器。接口无法对实现类的构造器做出限制,实际上也是可以不实现的,不过JDK中的Collection实现类均对其实现(个人理解这算是JDK的一种编码规范吧)。见下图的LinkedList。

无参构造器返回一个空的Collection

有参构造器的参数是另一个Collection ,完成的功能是从一种Collection转化为另一种Collection
JDK源码阅读笔记1 Collection

UnsupportedOperationException

当对Collection进行一些非法操作时,一般会throw UnsupportedOperationException,但也不是必须实现的。

下图是AbstractList抛出的UnsupportedOperationException

JDK源码阅读笔记1 Collection

对象的约束

Collection的实现类一般对其内容会有约束,最常见的就是非空和类型约束了。如LinkedList的tryAdvance方法就会抛出NullPointerException

JDK源码阅读笔记1 Collection

线程同步规定

Collection接口并未对线程策略进行规定,所以如果在实现类中处理不好,将会引起一些奇怪的问题

广泛使用Object.equals()

Collection的实现类经常使用Object.equals()来实现一些功能,同时也可以不使用equals方法来进行一些优化。

实现要求

Collection的实现类不允许实现任何的同步协议,如果必须使用的话需重写。

相关文章: