Map(I)
-
特点
- Map集合是双列集合,以key-value的形式存储
-
实现类
-
HashMap(C)
-
底层实现:哈希表(散列表)
-
底层数据结构
JDK1.7 数组+链表(添加到链表头部—头插法,添加时会将链表的第一个元素往后移一位)
JDK1.8 数组+链表(添加到链表的尾部—尾查法)|红黑树
-
特点:
- HashMap是无序的,通过key的hashCode进行排列
- 线程不安全
- 扩容是扩容大约原容量的一倍
-
key不可以重复,value可以有重复值,key可以为空,value可以为空
-
常用方法
-
put(K key, V value)
添加键值对,返回的是被覆盖的value值,如果key值重复,那么会把这个key的value值覆盖。
-
-
子类
LinkedHashMap(C)
- 底层数据结构:数组+链表+双向链表
- 特点:存入的数据有顺序(插入顺序)
-
-
HashTable(C)
-
底层数据结构:数组+链表
-
特点:
-
线程安全
Hashtable的方法都添加了synchronized关键词,所以他是线程安全的
-
扩容
Hashtable则是扩容一倍加一
-
父类
HashTable继承Dictionary抽象类
-
版本
Hashtable出现在JDK1.0
-
key和value都不允许存null
-
初始化
Hashtable初始容量为11在构造方法中初始化
-
-
-
ConcurrentHashMap(C)
-
底层数据结构
JDK1.7:数组(Segment数组 + hashEntry数组)+ 链表(hashEntry链表) 分段锁技术
JDK1.8:数组+链表|红黑树 CAS(Compare And Swap 比较并交换)+ synchronized
-
-
SortedMap(I)
- TreeMap(C)
- 底层数据结构:红黑树
- TreeMap(C)
-