HashMap, HashTable, ConcurrentHashMap, TreeMap, LinkedHashMap

HashMap

​ 使用位桶(桶数组)+链表实现,线程不安全,默认桶位16,默认扩容因子0.75f

​ put时,计算key的hash值,放到相应余数的桶中。

​ 如何处理hash冲突:桶位中存储的是链表,通过比对链表中Entry的key是否一致,一致覆盖,不一致加到链表的最低端。

​ key和value允许null

HashTable

​ 与HashMap相似,但是底层所有方法带synchronize关键字,线程安全,不允许null值key和value。jdk1.8后使用ConcorrentHashMap代替。

ConcorrentHashMap

​ 与HashMap相似,线程安全,但是使用的是分段锁而非synchronize,效率提高。

TreeMap

​ Key值会按ASCII编码排序,底层通过红黑树实现。

LinkedHashMap

​ Key值会按照put顺序排序,底层通过链表实现。