在Java中,集合类主要是Collection和Map两个接口派生出
Collection
Collection接口派生出Queue(队列),List(有序集合),Set(无序集合)三个主要的接口
List 和 Set 的区别:
List 是有序的,可重复,有索引
Set 是无序的,不可重复,没有索引
List 下又分为 ArrayList,LinkedList,Vector三类
ArrayList:底层使用数组实现,查询效率高,增加和删除效率低,线程不安全
LinkedList:不仅实现了 List 接口,还实现了 Queue 接口,可以用作栈的实现,也可以用作队列的实现,底层使用链表,查询效率低,增加和删除效率高,线程不安全
Vector:底层使用数组,查询效率高,增加和删除效率低,线程安全
Set 分为 HashSet,TreeSet,LinkedHashSet
HashSet:底层使用数组+链表+红黑树,元素无序,唯一,线程不安全,效率高,可以存储 nul 元素
TreeSet:底层使用红黑树,元素唯一,正常情况下不能有 null 值,但在重写 Comparable 接口后,可以有 null 值
LinkedHashSet:底层使用哈希表+链表实现,元素有序,线程不安全,可以有 null 值
Queue 下分为PriorityQueue 和 Deque
PriorityDueue:有序,这个有序并非是存储顺序,而是按照存储元素的大小进行排序,PriorityDueue中不允许有 null 值
Deque:是Queue的子接口,代表的是一个双端队列
Map
Map 集合分为HashMap,Hashtable,LinkedHashMap,TreeMap四种
HashMap:底层使用数组+链表+红黑树实现,线程不安全,key(键)可以为 null 值,无序
Hashtable:底层使用数组+链表实现,线程安全,key不能为 null 值,无序
LinkedHashMap:底层使用哈希表+双向链表实现,哈希表实现快速的查找操作,双向链表用来维护插入顺序或者访问顺序,因此是有序的,线程不安全,key 可以为 null 值
TreeMap:底层使用红黑树,线程不安全,key 不能为 null 值,有序