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
特点:
线程安全,支持多线程
有排序