美文网首页
(JDK源码分析)HashMap的基础概念

(JDK源码分析)HashMap的基础概念

作者: b77bb0abd5b4 | 来源:发表于2020-05-07 21:27 被阅读0次

    HashMap 日常开发中用的最多的类,面试高频点。网上也有很多博客和视频做了比较透彻的解析。这里作者也是从一个小白的角度出发来解析这个类。

    前面说到Object的时候,有说到hashcode是内存地址在hash表中的位置,而在hashmap中类中再次提到了hash表

    hashmap定义

    基于哈希表的Map接口实现。翻译过来。是时候深入理解一波了hash表到底是什么?

    任何技术产生都是有原因的。我们常用的数据结构数组

    数组

    我们想插入一个新的元素时候,后面的元素必须腾出位置向后移动。但是查询的时候数组直接用索引就能找到元素。

    在看看链表

    单链表

    单链表数据结构一个 数据域一个指针域,这样的话插入就很方便了,但是查询就要一个个比较了从头到尾。

    那试想一下结合两者的优点组合一下是什么。增删改查都是一步到位。

    然后就有了下面的想法

    来自百度百科

    哟西!这个就是hash表的大致结构了。hashmap按照此图实现没有问题了,都实现了,等等查询貌似有点问题?

    比如这里我查找126 我先找到10节点 在找到26 最后在确认126节点,可以看到查询的时间复杂度还是 o(n) 

    当然java大佬也做了优化,jdk8之后加入红黑树(红黑树???为什么会选择这个??之后在安排专题)

    针对于hash表还有一个问题,之前在object的equals方法说到过

    两个对象不相等,其 hashCode 有可能相同,这样就会造成冲突,源码是怎么解决的(留个悬念)

    好了数据结构大概清楚了  hashmap由数组+链表+红黑树组成

    了解数据结构后,在了解一下基础概念

    size

    size表示HashMap中存放KV的数量(为链表和树中的KV的总和)。

    capacity

    capacity译为容量。capacity就是指HashMap中桶的数量。默认值为16。

    loadFactor

    loadFactor译为装载因子。装载因子用来衡量HashMap满的程度。loadFactor的默认值为0.75f。

    threshold

    threshold表示当HashMap的size大于threshold时会执行resize操作。

    threshold=capacity*loadFactor

    大概过一遍,等等看下源码就明白了。今天就先到这里~

    参考博客

    https://blog.csdn.net/qq_32635069/article/details/79798741

    相关文章

      网友评论

          本文标题:(JDK源码分析)HashMap的基础概念

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