hashmap的hash冲突及解决办法,java hashmap 冲突
目录
1.哈希算法和哈希表2。哈希冲突3。有四种方法可以解决哈希冲突4。4的优化。1.8版中的散列表
00-1010了解哈希冲突。先了解哈希算法和哈希表。
哈希算法就是通过哈希算法把任意长度的输入变成固定长度的输出。输出结果是一个哈希表,也称为“哈希表”,是一种通过键直接访问内存存储位置的数据结构。在具体实现中,我们通过hash函数将键映射到表中的某个位置,获取这个位置的数据,从而加快数据查找的速度。
1. Hash算法和Hash表
哈希冲突是由于哈希算法,计算出来的数据是无限的,但是计算出来的结果范围是有限的,总会有不同的数据,计算出来的值是相同的,所以这种情况下就会发生所谓的哈希冲突。
00-1010开放寻址法又称线性检测法,是从发生冲突的位置开始,按照一定的顺序从哈希表中寻找一个空闲位置,然后将冲突的元素存储在这个位置。在java中,ThreadLocal使用线性检测方法来解决哈希冲突。
如图,当key=name存储在哈希表索引1的位置,然后在上面加上key=hobby,假设计算出的索引也是1,那么此时就会出现哈希冲突,而open和open寻址的方法就是向前找一个空位置,以便存储这个冲突的键。
链式寻址法,这是一种常用的方法,简单理解就是把有哈希冲突的键存储在单向链表中,比如HashMap。
如图,有冲突的键直接存储在单向链表中。
哈希法,即由一个哈希函数计算出的密钥,当有冲突时,可以用另一个哈希函数对密钥进行哈希,直到没有冲突为止。这种方法会增加计算时间,对性能有一定影响。
公共移除区的建立,意味着哈希表分为基本表和利益表两部分,所有冲突元素都放入利益表。
1.8版本中的
2. Hash冲突
HashMap通过链寻址和红黑树来解决哈希冲突问题,其中红黑树用于优化哈希表长链表带来的时间复杂度增加的问题。当链表的长度大于等于8,哈希表的容量大于64时,向链表添加元素会触发链表到红黑树的转换。
关于如何解决Java HashMap中的哈希冲突的这篇文章到此为止。有关Java HashMap哈希冲突的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。