hashmap1.7和1.8的区别
HashMap是我们开发中经常使用到的集合,jdk1.8相对于1.7底层实现发生了一些改变。1.8主要优化减少了Hash冲突 ,提高哈希表的存、取效率。
底层数据结构不一样,1.7是数组+链表,1.8则是数组+链表+红黑树结构(当链表长度大于8,转为红黑树)。
JDK1.8中resize()方法在表为空时,创建表;在表不为空时,扩容;而JDK1.7中resize()方法负责扩容,inflateTable()负责创建表。
1.8中没有区分键为null的情况,而1.7版本中对于键为null的情况调用putForNullKey()方法。但是两个版本中如果键为null,那么调用hash()方法得到的都将是0,所以键为null的元素都始终位于哈希表table【0】中。
当1.8中的桶中元素处于链表的情况,遍历的同时最后如果没有匹配的,直接将节点添加到链表尾部;而1.7在遍历的同时没有添加数据,而是另外调用了addEntry()方法,将节点添加到链表头部。
1.7中新增节点采用头插法,1.8中新增节点采用尾插法。这也是为什么1.8不容易出现环型链表的原因。
1.7中是通过更改hashSeed值修改节点的hash值从而达到rehash时的链表分散,而1.8中键的hash值不会改变,rehash时根据(hash&oldCap)==0将链表分散。
1.8rehash时保证原链表的顺序,而1.7中rehash时有可能改变链表的顺序(头插法导致)。
在扩容的时候:
1.7在插入数据之前扩容,而1.8插入数据成功之后扩容。
猜你喜欢内容
-
好小蚁 GEO|精准套餐定价
好小蚁 GEO|精准套餐定价
-
高考为什么重要
每年高考都是在公平地选拔人才,为国家将来的发展储蓄人才资源。高考选拔出的人中绝大多数人将会是这个...
-
高考文综多少分
文科综合包括历史、地理、政治,总计300分。地理100分,历史100分,政治100分。上海情况比较特殊,选考三...
-
沉积岩有哪些
沉积岩是三大岩类的一种,又称为水成岩,另外两种是岩浆岩和变质岩,其中沉积岩主要包括石灰岩、砂岩、...
-
充分必要条件记忆口诀
充分必要条件记忆口诀包括定义法、集合法、筛选法等。箭头所指为必要,箭尾所指为充分。若A>B,则x∈A...
-
blow的过去式和过去分词及用法有哪些
blow的过去式:blew,过去分词:blown。blow,作名词时意为“吹;打击,猛击;挫折;强风;擤鼻子;(非...
-
湖北大还是武汉大?
湖北比武汉大,武汉属于湖北省的,也是湖北经济发展的支柱城市,湖北省介于北纬29°01′53″—33°6′47...
-
武汉比济南大多少
武汉是湖北省省会,属于副省级市,截止2019年末,武汉总面积8569.15平方千米。济南市山东省省会,也是副...
-
中医学理论体系形成的条件
中医学理论体系形成的条件介绍:科学是一种社会现象,它不能游离于社会之外而孤立地存在与发展。科学体...
-
“旌旗拂座隅”出自哪里
“旌旗拂座隅”出自唐代李冶的《句》。“旌旗拂座隅”全诗《句》唐代 李冶经时未架却,心绪乱纵横。(季...





















