您的位置:首页 > 编程语言 > Java开发

【深入Java基础】各个Map类的比较与总结

2018-02-04 14:45 323 查看

各个Map类的比较与总结

本文主要对

HashMap,

LinkedHashMap,

TeeeMap,

WeakHashMap,

IdentityHashMap

进行对比分析。

Map : 以key-value键值对的形式存储数据,通过key获取value。是一种无序的数据结构。

一、HashMap

HashMap是最常用的一种map。它有以下特点:

1.内部数据存储使用数组+链表实现(1.8之后为了解决大量hash冲突,引入了红黑树)

2.采用链地址法解决hash冲突。

3.键值对是无序排列的(除非hash值有序)。要想转化为有序排列可利用Collections.sort()实现。

4.key和value都允许为null。并且只允许一个key为null,但允许多个value为null。

5.不是同步的。要想变为同步需要手动加锁或者使用Collections.synchronizedMap()返回一个同步的map。

二、LinkedHashMap

LinkedHashMap是一种有序的HashMap,继承自HashMap,内部实现原理和HashMap极为相似。它有以下特点:

1.它是有序的map,即“插入有序”和“访问有序”。LinkedHashMap内部比HashMap多了一个双链表来维护这种顺序关系。所以它的性能要弱于HashMap。

2.它不是同步的。而Hashtable是同步的(它们的内部数据结构相似)

3.key和value都允许为null。并且只允许一个key为null,但允许多个value为null。

三、TreeMap

TreeMap是一种有序的Map。内部采用红黑树存储数据。它有一下特点:

1.内部采用红黑树实现。

2.可以重写compare()方法实现升序或者降序排列。

3.它不是同步的。

四、WeakHashMap

WeakHashMap即“弱HashMap”。它与HashMap的主要区别如下:

HashMap保留key所引用的对象,除非hashmap对象销毁否则key所引用的实际对象不会被回收。而WeakHashMap的key所引用的对象可能被回收,回收之后会自动删除entry键值对。

五、IdentityHashMap

IdentityHashMap即“一致的HashMap”,也就是当两个key严格相等,即为同一对象(key1==key2)时才认为是同一key。

六、比较

HashMapHashtableLinkedHashMapTreeMap
数据结构数组+链表数组+链表数组+链表+双向链表红黑树
有序性无序无序有序有序
可否为nullkey和value都可为nullkey和value都不可为nullkey和value都可为nullkey和value都可为null
同步性不同步同步不同步同步
时间复杂度插入O(1),查找O(1)插入O(1),查找O(n²)插入O(1),查找O(log(n))插入O(1),查找O(log(n))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Map