java.util.Map包下各个类的特点汇总

时间:2022-06-19 15:48:42

java.util.Map包下各类和接口的特点如下图(包含实现方式,特点,父子关系)

java.util.Map包下各个类的特点汇总


文字版是这样的:

Map接口

HashTable

实现:基于拉链法,初始长度11,加载因子0.75,扩展长度2倍+1。

特点:

线程安全(全map锁),支持多线程

key和value都不可以是null

支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历

添加元素时使用key的hashCode()


HashMap

实现:基于拉链法,初始长度16,加载因子0.75,扩展长度2倍。

特点:

非线程安全

key和value都可以是null

只支持Iterator(迭代器)遍历

添加元素时使用自定义的哈希算法


LinkedHashMap

实现:基于双向链表

特点:

非线程安全

有顺序(按照插入顺序)


WeakHashMap

特点:

没有实现Cloneable和Serializable接口

key是弱引用


EnumMap

实现:基于数组

特点:

key不能是null

创建时需要指定枚举


TreeMap

实现:基于红黑树

特点:

有序,按照key的自然顺序排序,或者自定义Comparator排序

非同步


ConcurrentHashMap

特点:

线程安全,支持多线程

没有排序

把map分成多个段,每段自己有锁,相当于分成了度个HashTable

put和get操作也基于分段


ConcurrentSkipListMap

实现:基于SkipList

特点:

线程安全,支持多线程

有排序