您的位置:首页 > 其它

五种Map集合简介

2017-03-03 15:46 76 查看

1、HashMap的底层实现

这里简单提一下,HashMap的底层实现是一个哈希表。当然,这是一个性能比较高的哈希表,哈希表的长度增长、散列算法等都进行了优化。

2、HashMap和HashTable的区别

二者实现的功能是相似的,只在一些小的方面有区别:

HashMap是非线程安全的,可以接受null作为键或者是值,而HashTable使用了Synchronous关键字,因此是线程安全的,因此在多线程环境先使用时,由于同步锁的存在,而且是对整个哈希表上锁,所以对HashTable的访问以及修改效率会比较低。

3、LinkedHashMap与TreeMap

TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。 

LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.

4、ConcurrentHashMap

  HashTable容器在竞争激烈的并发环境下表现出效率低下,究其原因是因为所有访问HashTable的线程都必须竞争同一把锁。如果容器里有多把锁,每一把锁用于锁住容器中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。

在JDK1.8中,这种逐段加锁的方法也被摒弃了,转而采用了volatile和CAS算法,Synchronous关键字使用的是互斥锁,存在线程阻塞和上下文切换,而CAS算法采用的是轮询机制,因此后一种方法具有更高的效率。

关于以上五种种数据结构,以后对照JDK源码再详细分析,这里只做简单记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: