hashmap为什么8转成红黑树 hashmap1.7和1.8的区别?
hashmap1.7和1.8的区别?
1. 底层数据结构不同。1.7为数组链表,1.8为数组链表红黑树结构(当链表长度大于8时,变为红黑树)。
2. 在JDK1.8中,当表为空时,reset()方法创建表;当表不为空时,它扩展容量;在JDK1.7中,reset()方法负责扩展容量,inflatetable()方法负责创建表。
3.1.8不区分null键的情况,而1.7为null键的情况调用putfornullkey()方法。但是,在这两个版本中,如果key为null,hash()方法将得到0,因此key为null的元素总是在hash表[0]中。
4. 当1.8中的bucket元素在链表中时,如果没有匹配,则直接将节点添加到链表的尾部;而在1.7中,则不添加数据,而是调用addentry()方法将节点添加到链表的头部。
5.1.7中的新节点采用头部插入法,1.8中的新节点采用尾部插入法。这也是为什么1.8不容易出现环列表。
在6.1.7中,通过改变hashseed值来修改节点的散列值,从而实现重散列时链表的分散,而在1.8中,密钥的散列值不变,重散列时链表按照(hash&;ampoldcap)==0进行分散。
7. 1.8重设确保了原始列表的顺序,而1.7重设可能会改变列表的顺序(由于插入头部)。
8. 扩容中:数据插入前1.7,数据插入成功后1.8。
你经历过哪些有意思的面试题目?
你好,我很高兴回答你的问题。
如果你是某个单位的公职人员,你的亲戚朋友经常来找你打听单位的内部事务。如果你有什么事需要你帮忙,你应该怎么处理?][真题]爱狗协会人士反映,最近他们用200条狗堵了一辆车,网上批评刘胡兰、邱少云、琅琊山五杰等中国抗日英雄的言论很多。你觉得这个怎么样?]【真题】近年来,释放积德的行为层出不穷,但最近有人放生老鼠。你怎么认为?
面试题还有很多其他意思,小编不会一一列出,如果你有兴趣,可以去sd.offcn.com网站学习。
Java源码hashmap,当key的hashcode相同的时候,为什么会把value加到链表里?
HashMap的底层是一个一维数组,数组中的每个元素都是一个链表。添加元素时,首先通过hashcode定位数组下标,然后通过equals方法判断链表中是否有相同的键。如果它们不同,则会添加到链表中,如果它们相同,则会覆盖值。
在jdk8中,如果有8个以上的链表元素,链表将存储为红黑树以提高性能。
Hashcode方法可以尽可能减少哈希冲突,具有最高的性能。如果链表较长,则性能较低。
搞Java的年薪40W是什么水平?
这是培训机构告诉你的吗?具体的年薪不仅仅是一个广告的问题,还取决于你完成学业后去哪一个城市,去哪一类公司。一般的培训机构会吹嘘自己有一种特殊的技能,但事实可能并非如此
hashmap为什么8转成红黑树 hashmap为什么用红黑树 jdk8为什么要用红黑树
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。