Collection是一个顶层的接口,在集合类中还有Map也属于顶层接口(参考Java集合类之Map探究),本文通过一张类图描述List和Set的基本结构。
类图解析:
Collection是一个顶层的接口,定义了一系列方法,List和Set是继承自Collection的接口。
每个Collection都可以产生一个Iterator(参考Java iterator与iterator模式),从而可以利用Iterator进行遍历。
AbstractCollection是Collection的抽象实现,所有的实现类都继承自AbstractCollection。
AbstractList继承自AbstractCollection,且实现了List接口,所有的List实现类都继承自AbstractList。
ArrayList 和 LinkedList都继承自AbstractList,而且LinkedList实现了Queue接口,因此LinkedList可以当队列使用。Vector是一个同步的List,由于synchronized代价较大,已经不推荐使用。
ArrayList和LinkedList对比:
ArrayList内部由array实现,因此访问速度较快,而且随着size增加时,访问速度不会受到太大影响;但是当增加或删除元素时,由于需要对元素进行移动甚至新建一个array重新copy(参考),因此代价较大。
LinkedList内部由链表实现,当size增加时,访问速度明显受到影响;但是增加删除元素时,代价较小。
AbstractSet继承自AbstractCollection,且实现了Set接口,所有的Set实现类都继承自AbstractSet。
Java Set的设计和Map相似,可以参考Java集合类之Map探究
Hashset 作为通用Set使用
LinkedHashSet与Map(参考java集合类之Map探究)有通用的方面,按照插入顺序进行保存数据。
TreeSet实现了SortedSet接口,是一个有序的Set。
Vector,Stack已经不推荐使用
另外,Collections是一个工具类,包含大量对Collection类的操作,这里不做太多描述