通过对HashMap的源码分析解决部分关于HashMap的问题

简介: 通过对HashMap的源码分析解决部分关于HashMap的问题
  1. HashMap第一次分配多大的空间

fd37cade6bd1808532af6621d2f1d811.png


7fd219cbc9324b525a8a912507bcf3da.png

7a9bcac10a482bd50c62f8311f9467b7.png

f215f34fc86840b4b69aeae1a7f7513c.png

我们查看resize()中的源码

987d1c5f9a1f77ed113825087760c49b.png

8252d31c1637adfad35a2f29f6944224.png

4ece3650025e847de103f597f8f026e7.png

f0e8b098f526664a9f7e07c4678bdb45.png

所以当我们没有传入默认容量的参数的时候,默认容量是16

  1. 当传进一个20的初始参数时,数组的容量是多大

24dde11213c4c746b074d84d2468689d.png

所以当我们传入20的参数,这时创建的容量是32(2^5)

对hashcode和equals的理解

重写equals()方法必须重写hashcode()方法,重写hashcode方法之后两个逻辑上相等的对象可以hash到同一个下标

当HashMap容量扩容时应该注意什么

①把原来hash桶的元素依次读取

②把所有元素重新hash到新的桶位

③将元素按照规则插入到相应的下标

HashMap什么时候变成树,变成树对象没有实现比较接口时,怎么比较?


dfc75a8ab0cc577deb7b5d462b81a19f.png

c673477d9ea3c4085c5046073b223177.png

所以树化的条件是链的长度大于等于8,并且元素hash桶中的元素大于等于64

比较时如果没有实现比较接口,那就使用hashcode进行比较

当HashCode相等时equals()相等吗,反之如果equals相等hashcode()相同吗?

①equals()相等,hashcode一定相等

②equals()不相等,hashcode()不一定不相等(哈希冲突)

③hashcode()相等,equals()不一定相等

④hashcode()不等,equals()一定不等


相关文章
|
9月前
|
Java
【JDK 源码分析】HashMap 操作方法
【1月更文挑战第27天】【JDK 源码分析】HashMap Put 元素 初始化
|
4月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
59 1
|
6月前
|
存储 缓存 安全
深度剖析Java HashMap:源码分析、线程安全与最佳实践
深度剖析Java HashMap:源码分析、线程安全与最佳实践
|
8月前
|
存储 Java 测试技术
滚雪球学Java(66):Java之HashMap详解:深入剖析其底层实现与源码分析
【6月更文挑战第20天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
59 3
滚雪球学Java(66):Java之HashMap详解:深入剖析其底层实现与源码分析
|
8月前
|
存储 算法 安全
JDK源码分析-HashMap
JDK源码分析-HashMap
|
9月前
|
存储 算法
HashMap源码分析
HashMap源码分析
|
9月前
|
安全 Java
【JDK 源码分析】HashMap 线程安全问题分析
【1月更文挑战第27天】【JDK 源码分析】HashMap 线程安全问题分析
|
9月前
|
存储 Java
【JDK 源码分析】HashMap 底层结构
【1月更文挑战第27天】【JDK 源码分析】HashMap 底层结构
|
9月前
|
存储 算法 Java
HashMap的源码分析(基于JDK1.8)
HashMap的源码分析(基于JDK1.8) Java中的HashMap是一种常用的数据结构,它是基于哈希表的数据结构,可以用来存储键值对。在HashMap中,每个键值对被称作一个Entry,每个Entry包含一个键和一个值。HashMap的实现基于数组和链表,数组用于存储Entry,链表用于解决哈希冲突。
|
存储 Java
[java进阶]——HashMap的底层实现原理和源码分析,另附几个高频面试题
[java进阶]——HashMap的底层实现原理和源码分析,另附几个高频面试题
200 0