集合是一个存储相同内容的容器。集合类主要由Map和Collection两个根接口派生而成。
在Collection下面有三个子接口来继承它,这三个子接口分别是List接口、Set接口和Queue接口。
List接口:
Set接口:
Queue接口:
Map 接口下面的集合类主要由AbstractMap抽象类和SortedMap接口派生而来。比较常用的集合类有:HashMap,Hashtable,TreeMap,ConcurrentHashMap
AbstractMap抽象类:
SortedMap接口:
常用集合类:
各类集合详解 :
List集合:
1、有序集合(存储和取出元素顺序相同)
2、有索引(可以使用普通for循环遍历)
3、元素可以重复(允许存储重复数据)
List集合下面有ArrayList、LinkedList、vector等子类他们的区别和联系有下表
ArrayList | LinkedList | Vector | |
底层数据结构 | 数组 | 双向循环链表 | 数组 |
特点 | 查询快,增删慢 | 查询慢,增删快 | 查询慢,增删慢 |
线程安全性 | 不安全 | 不安全 | 安全 |
Set集合:
1、无序集合(存储和取出元素顺序不同)
2、无索引(不可以使用普通for循环遍历)
3、元素不可以重复(不允许存储重复数据)
List集合下面有HashSet、LinkedHashList、TreeSet等子类他们的区别和联系有下表
HashSet | LinkedHashSet | TreeSet | |
底层数据结构 | 哈希表(数组+链表或红黑树) | 链表+哈希表 | 红黑树 |
特点 | 查询快,增删快 | 查询快,增删快 | 查询快,增删快 |
保证唯一性方式 | 重写hashCode()和equals() | 重写hashCode()和equals() | CompareTo()返回0 |
线程安全性 | 不安全 | 不安全 | 不安全 |
HashSet:HashSet 是用来存储没有重复元素的集合类 ,底层是HashMap
LinkedHashSet:使用 HashSet 机制实现,它是一个可以保证插入顺序或是访问顺序的集合类
TreeSet:TreeSet 实现了 SortedSet 接口,意味着可以排序,它是一个有序的集合类
Map集合:
HashMap | Hashtable | TreeMap | ConCurrentHashMap | |
底层数据结构 | 数组+链表或红黑树(链表长度>8) | 数组+链表或红黑树(链表长度>8) | 红黑树 | 数组+链表或红黑树(链表长度>8) |
是否允许null键值 | 是 | 否 | 否 | 否 |
线程安全性 | 不安全 | 安全 | 不安全 | 安全 |
HashMap :是以key-value 键值对形式存储数据,允许 key 为 null(多个则覆盖),也允许 value 为 null。底层结构是数组 + 链表 + 红黑树。
Hashtable:Hashtable 也是一个哈希散列表,Hashtable 继承于 Dictionary,使用重入锁 Synchronized 实现线程安全,key 和 value 都不允许为 Null。HashTable 已被高性能的 ConcurrentHashMap 代替。
TreeMap :实现了 SotredMap 接口,意味着可以排序,是一个有序的集合。底层数据结构是红黑树结构,TreeMap 中的每个元素都存放在红黑树的节点上,默认使用自然排序,也可以自定排序,线程不安全。
ConCurrentHashMap:采用CAS + Synchronized 实现锁操作,Node 改名为 HashEntry,引入了红黑树保证查询效率,底层数据结构由数组 + 链表 + 红黑树组成,Node 数组默认为 16。