常用的Map实现类
常见的Map实现类大概简单地列举几个。
- java.util.HashMap
- java.util.LinkedHashMap
- java.util.concurrent.ConcurrentHashMap
- java.util.concurrent.ConcurrentSkipListMap
- java.util.IdentityHashMap
- java.util.TreeMap
- java.util.Hashtable
- org.springframework.util.ConcurrentReferenceHashMap
- org.springframework.core.annotation.AnnotationAttributes extends LinkedHashMap
- org.springframework.ui.ModelMap extends LinkedHashMap
- com.mysql.jdbc.util.LRUCache extends LinkedHashMap

各种Map的数据结构,特点
- HashMap基于单向链表数组存储数据,默认容积16,但是在数组上并没有按照数组下标顺序存储,而是按Key的哈希值计算在数组中的位置。
|
|
- LinkedHashMap基于双向链表存储数据。
|
|
- IdentityHashMap并不是常用的类,但也还是说一下,它基于Object数组存储,默认容积32,实例化时容积会在默认容积*2(64),因为Key进行哈希后指定坐标位置存储,然后紧接着下个下标元素会存储对应的value;扩容算法为乘以2;另一个特点,它key在取哈希的时候是用的Object的原始算法,因此,只要KEY是不同的对象,内存地址不相同就可以存入两个相同内容的KEY,也就是Key可以重复。
|
|
- TreeMap基于红黑二叉树结构。左孩子节点存放比根节点小的,右孩子节点存放比根节点大的数据,因此,数据存储是有顺序的; 非线程安全,因此,若要在多线程同时处理时需要在外部做好同步操作处理。
|
|
*
有趣的设计
- 接口中又定义了接口, Map.Entry定义了所有数据节点的结构和方法。
最后
由于是尝试分析,非常地浅显,欢迎各路大神对文中错误提出指正,对不足之处不吝赐教。