五种Map集合简介

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源码再详细分析,这里只做简单记录。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值