基于Collection

1) Set(无序无重复)

Set是通过equals()判断对象是否重复,因此类型使用自定类时需要实现equals()

1.1 HashSet

插入条件(equals+Hashcode)
由Hash算法计算出Hash Code从而决定插入位置,也借Hash code判重。
遍历顺序由Hashcode决定。

1.1.1 LinkHashSet

插入条件(equals+Hashcode)
链表实现Hashset,在插入时需要由Hashcode维护顺序,所以插入性能较低,但遍历性能高。
由于链表特性,遍历LinkHashSet的顺序是插入顺序

1.2 SortSet(接口)

此接口主要用于排序操作,即实现此接口的子类都属于排序的子类

1.2.1 TreeSet

实现SortSet接口,插入自定义对象时需要实现Comparable接口或者指定Comparator,否则会抛出java.lang.ClassCastException异常
Java深入了解TreeSet

1.3 EnumSet

为枚举类设计的Set,新建对象时需要指定对应的枚举类,如xxx.class,若插入非类中成员时会抛出异常,且不允许插入null。
顺序为枚举类中的顺序。
专为枚举类设计的集合类EnumSet

 

 

2) List(有序重复)

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许加入重复元素,因为它可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引

2.1 ArrayList

(基于数组实现,线程不安全)
封装了一个动态的增长的、允许再分配的Object[]数组。在add时候判断是否数据已满,再进行填充,因此空间上存在一定浪费。

2.2 Vector

(基于数组实现,线程安全)
API都引入synchronized关键字,因此线程安全。实现方法类似于ArrayList

2.2.1 Stack

(基于Vector实现,实现FILO先进后出)

2.3 LinkedList

(实现List, Deque,双向链表,可用于堆栈、队列或双端队列|Serializable支持序列化|非线程安全)

 

 

3) Queue(FIFO先进先出队列)

3.1 PriorityQueue

(有序,按从小到大排序)
基于有序二叉树,小根堆排序,通过维护一个完全二叉树来实现容器的有序。

3.2 Deque

(接口,双端队列|可做队列可做栈)

3.2.1 ArrayDeque

(基于数组维护的双端队列|线程不安全)
当作为栈使用时,性能比Stack好;当作为队列使用时,性能比LinkedList好。

3.2.2 LinkedList

(链表)

KAI Java, 容器 ,