首页 > 编程知识 正文

hashmap底层实现原理红黑树,hashmap存储的数据结构

时间:2023-05-04 11:45:13 阅读:129420 作者:2065

HsahMap的基础原理hashMap是Java语言中最常见的数据结构1、hashMap的数据结构

要理解hashmap,首先需要弄清他的数据结构。 在java编程中,最基本的数据结构有数组和链表两种。

数组:查询速度快,可以基于索引进行查询,但很难插入和删除。

链表:查询速度慢,需要遍历整个链表,但插入和删除相对简单。

HashMap由数组和链表组成,数据结构也称为链表哈希。2.hashmap特点

快速存储—例如,在对混列映射执行get和put操作时,速度非常快,搜索速度也非常快。 (时间复杂性o(1) )如果使用key去一个value,时间复杂性非常低,效率很高,可扩展。 1数组扩展,边长。 2、单线列表长度超过8时为红黑树3.hashmap的Hash算法

在说哈佛算法之前,Java需要知道所有对象都有hashcode (使用密钥)。 使用object对象的get hashcode可以获得指向int类型的手指。 我们在hashmap中主要用他的key来计算那个值。Hash值的计算

Hash值=(hashcode ) ^(hashcode 16 ) ) ) )。

Hashcode赋予Hashcode自身向右移动16位的异或运算。 这样可以确保计算出的值足够随机。 因为在进行混列计算时,计算数组下标时计算的值足够分散,以便充分分散。 如上所述,hashmap的下级层由数组组成,数组的默认大小为16,但是如何计算数组下标,它是:

序列下标: hash(16-1 )=hash

对哈市计算得到的hash进行16的求馀,得到16的位数。 例如,如果是1到15之间的数字,则hashmap将预运算为hash值和15。 这样会更有效率。 在计算机中,很容易识别这种向右位移、向左位移。

Hash冲突

如果不同对象计算的数组后缀相同,则会发生混列冲突。Hash冲突会产生单线链表

单线链表达到一定长度后效率会非常低,但jdk1.8以后加入了红黑树。 也就是说,单线列表达到一定长度时会变成红黑树

Hashmap底层原理扩容

扩展

排列长度变为2倍的0.75

触发条件

数组存储的比率达到了75 %0.75

一下是需要理解的:

Hashmap扩展不是为单线链表准备的,单线链表是为解决hash冲突而准备的。 也就是说,如果排列为一定的长度,例如hashmap的默认排列长度为16,则达到出发条件,在排列存储比率达到75%、即16*0.75=12时容量扩大

红黑树

二叉树,高效的搜索效率

如前所述,当链表达到一定长度时,链表变成红黑树

触发条件

如果链表长度大于8,则将后续数据转换为二叉树红黑树就是上图所示

a下面有两个节点BC,b和c下面有DEF

总结

Hashmap数据结构

数组、单线链表、红黑树(1.8 )。

混洗映射的特点

1、高速存储

2、快速搜索

3、可伸缩Hash算法

为什么要使用hash算法? 在我们Java中,每个对象都有hashcode。 hash算法是hashcode和自己向右移位16的异或运算。 这是因为所计算出的混列值足够随机、足够分散和所生成的数组下标足够随机

还有就是hash冲突

面试中询问了为什么会有hash的冲突

例如,我们也插入数组。 大家算下来就是13号了。 那么,这个时候会发生散列冲突。 为了解决hash冲突,我们的数组将是单线链表。 然后,当我们的单线链表达到一定长度时就会产生红黑树。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。