collection是一个接口
Collection是所有java中“一组对象”,或者说集合都实现的接口,其父接口是Iterable。Collection的实现类有的可以容纳重复数据如LinkList, 有的不可如Bag,有的有序有的无序。但他们都不是直接实现了Collection而是实现了其子接口,如下图LinkedList就是实现了List和Queue(Deque)等接口。
两个构造器 无参和有参
一般来讲,Collection的实现类均应实现两个“标准”构造器。接口无法对实现类的构造器做出限制,实际上也是可以不实现的,不过JDK中的Collection实现类均对其实现(个人理解这算是JDK的一种编码规范吧)。见下图的LinkedList。
无参构造器返回一个空的Collection
有参构造器的参数是另一个Collection ,完成的功能是从一种Collection转化为另一种Collection
UnsupportedOperationException
当对Collection进行一些非法操作时,一般会throw UnsupportedOperationException,但也不是必须实现的。
下图是AbstractList抛出的UnsupportedOperationException
对象的约束
Collection的实现类一般对其内容会有约束,最常见的就是非空和类型约束了。如LinkedList的tryAdvance方法就会抛出NullPointerException
线程同步规定
Collection接口并未对线程策略进行规定,所以如果在实现类中处理不好,将会引起一些奇怪的问题
广泛使用Object.equals()
Collection的实现类经常使用Object.equals()来实现一些功能,同时也可以不使用equals方法来进行一些优化。
实现要求
Collection的实现类不允许实现任何的同步协议,如果必须使用的话需重写。