Map常见实现类
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顺序排序,底层通过链表实现。