基于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
(链表)