HashMap的实现原理?如何保证HashMap线程安全?
Posted 遇见你真好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap的实现原理?如何保证HashMap线程安全?相关的知识,希望对你有一定的参考价值。
a:HashMap简单说就是它根据建的hashcode值存储数据的,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历的顺序是不确定的。
b:HashMap基于哈希表,底层结构由数组来实现,添加到集合中的元素以“key--value”形式保存到数组中,在数组中key--value被包装成一个实体来处理-
也就是上面Map接口中的Entry
c:在HashMap中,Entry[]保存了集合中所有的键值对,当我们需要快速存储、获取、删除集合中的元素时,HashMap会根据hash算法来获得“键值对”,
在数组中存在的位置,来实现对应的操作方法。
d:HashMap底层采用了数组来维护的,Entry静态内部类的数组
e:HashMap添加元素:将准备增加到的Map中的对象与该位置上的对象进行比较(equals方法),如果相同那么就将该位置上的那个对象
(Entry类型)的value值替换掉,否则沿着该Entry的链继续重复上述过程,如果到链的最后仍然没有找到与此对象相同的对象,那么这个时候
就会被增加到数组中,将数组中该位置上的那个Entry对象链到该对象的后面(先hashcode计算位置,如果找到 相同位置便替换值,找不到则重复
hashcode计算,直到最后添加到hashmap最后面)
f:HashMap是基于哈希表的Map接口的非同步实现,允许null键值,但不保证映射的顺序;底层使用数组实现,数组中的每项是一个
链表;存储时根据key的hash算法来决定其存储位置;数组扩容需要重新计算扩容后每个元素在数组中的位置很耗性能
g:ConcurrentHashMap是HashMap线程安全的实现,允许多个修改操作同时进行(使用了锁分离技术),它使用了多个锁来控制
对hash表的不同段进行修改,每个段其实就是一个小的hashtable,它们有自己的锁。使用了多个hash表(段Segment),允许多个读操作
并发进行,读操作并不需要锁,因为它的HashEntry几乎是不可变的。
以上是关于HashMap的实现原理?如何保证HashMap线程安全?的主要内容,如果未能解决你的问题,请参考以下文章