Java集合类之List,Set探究

时间:2021-03-20 17:55:02

Collection是一个顶层的接口,在集合类中还有Map也属于顶层接口(参考Java集合类之Map探究),本文通过一张类图描述List和Set的基本结构。

Java集合类之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类的操作,这里不做太多描述