美文网首页js css html
Java--HashMap底层实现详解-3

Java--HashMap底层实现详解-3

作者: 李赫尔南 | 来源:发表于2022-10-24 08:20 被阅读0次

·取数据过程get(key)
  我们需要通过key对象获得“键值对”对象,进而返回value对象。明白了存储数据过程,取数据就比较简单了,参见以下步骤:
  (1)获得key的hashcode,通过hash()散列算法得到hash值,进而定位到数组的位置。
  (2)在链表上挨个比较key对象。调用equals()方法,将key对象和链表上所有节点的key对象进行比较,直到碰到返回true的节点对象为止。
  (3)返回equals()为true的节点对象的value对象。

  明白了存取数据的过程,我们再来看一下hashcode()和equals方法的关系:
  Java中规定,两个内容相同(equals()为true)的对象必须具有相等的hashCode。因为如果equals()为true而两个对象的hashcode不同;那在整个存储过程中就发生了悖论。

·扩容问题
  HashMap的位桶数组,初始大小为16。实际使用时,显然大小是可变的。如果位桶数组中的元素达到(0.75*数组length),就重新调整数组大小变为原来2倍大小。
  扩容很耗时。扩容的本质是定义新的更大的数组,并将旧数组内容挨个拷贝到新数组中。

·JDK8将链表在大于8情况下变为红黑二叉树
  JDK8中,HashMap在存储一个元素时,当对应链表长度大于8时,链表就转换为红黑树,这样又大大提高了查找的效率。
  下一次,我们简单介绍一个二叉树。同时,也便于大家理解TreeMap的底层结构。
Java--TreeMap的使用和底层实现

相关文章

  • Runloop

    Runloop 实现原理及应用iOS - RunLoop 底层源码详解及具体运用

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • 底层原理

    iOS底层原理总结 - Category的本质 KVO详解及底层实现青少年一定要读的KVO指南 iOS 底层解析w...

  • 详解KVO底层实现

    前言 KVO: Key-Value-Observer,它来源于观察者模式, 其基本思想(copy于某度)是一个目标...

  • ReentrantLock(AQS),Volatile,Sync

    本文参考: JUC学习(八):AQS的CLH队列并发编程——详解 AQS CLH 锁JMM和底层实现原理 AQS ...

  • 目录【Java实习生准备】

    HashMap底层详解-001-数据结构、put、get HashMap底层详解-002-hash算法、长度的秘密

  • Java CAS底层实现详解

    前言 这篇文章将深入介绍CAS在JDK具体的实现方式,填补Java源码系列(7) -- AtomicInteger...

  • KVO详解及底层实现

    什么是KVO?? KVO就是NSKeyValueObserving,请看官方文档的解释: 大概翻译如下: 简单理解...

  • LeetCode 查找表专题 3:set 和 map 不同底层实

    LeetCode 查找表专题 3:set 和 map 不同底层实现的区别 set 和 map 不同的底层实现,影响...

  • 一些值得思考的问题

    1、GCD的底层实现逻辑 2、socket底层实现逻辑 3、自己动手实现一个crash收集sdk(或者其他的工具类...

网友评论

    本文标题:Java--HashMap底层实现详解-3

    本文链接:https://www.haomeiwen.com/subject/pqtwzrtx.html