首页 > 其他分享 >HashMap的底层原理

HashMap的底层原理

时间:2024-07-16 15:25:19浏览次数:13  
标签:HashMap 数组 链表 HashTable 哈希 长度 原理 底层

1.HashMap是

       根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

2.什么是哈希冲突(面试题)

        存储数据时,对key值进行hash运算,找到对应的下标位置进行存储,该位置没有数据就直接存储,当该位置有数据时就会出现hash冲突和碰撞。

3.解决哈希冲突的方法(面试题)
(1) 开放地址法

插入一个元素的时候,先通过哈希函数进行判断,若是发生哈希冲突,就以当前地址为基准,根据再寻址的方法(探查序列),去寻找下一个地址,若发生冲突再去寻找,直至找到一个为空的地址为止。所以这种方法又称为再散列法。

(2) 再哈希法

再哈希法又叫双哈希法,有多个不同的Hash函数,当发生冲突时,使用第二个,第三个,….,等哈希函数计算地址,直到无冲突。虽然不易发生聚集,但是增加了计算时间。

(3) 链地址法

每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表连接起来。

比如 66和88这两个元素哈希值都是1,这就发生了哈希冲突,采用链地址法,可以把 66和88放在同一个链表中。

(4)建立公共溢出区

将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。

4.HashMap和HashTable的区别

①线程是否安全

HashMap线程不安全。HashTable线程安全,但是效率较低。

②是否null

HashMap中key只能有一个null,value可以多个为null。HashTable不允许键或值为null。

③容量

HashMap底层数组长度必须为2的幂(16,32,128…),默认为16。HashTable底层数组长度可以为任意值,导致hash算法散射不均匀,容易造成hash冲突,默认为11。

④底层区别

HashMap是底层由数组+链表形成,在JDK1.8之后链表长度大于8时转化为红黑树。HashTable一直都是数组+链表。

⑤继承关系

HashTable继承自Dictionary(滴克迅那瑞)类。

HashMap继承自AbstractMap(啊不斯拽t Map)类。

5.HashMap链表和红黑树转换(面试题)
  • 链表长度大于8,并且表的长度大于64   数组 + 红黑树
  • 链表长度大于8,并且表的长度不大于64  数组 + 链表 会扩容
  • 当数的节点小于6             数组 + 链表
6.为什么负载因子是0.75?

根据时间复杂度和空间复杂度计算,表长度达到8个元素的时候,概率为0.00000006,几乎是一个不可能事件,减少了哈希冲突。

加载因子 = 填入表中的元素个数 / 散列表的长度

7.HashMap扩容(面试题)
(1)什么时候会发生扩容?

元素个数 > 数组长度 * 负载因子 例如 16 * 0.75 = 12,当元素超过12个时就会扩容。

链表长度大于8并且表长小于64,也会扩容

(2)为什么不是满了扩容?

因为越元素越接近数组长度,哈希冲突概率就越大,所以不是满了扩容。

标签:HashMap,数组,链表,HashTable,哈希,长度,原理,底层
From: https://blog.csdn.net/dhdhkakak/article/details/140465359

相关文章

  • SciTech-EECS-PCB设计- PCB布线-电路原理图设计
    PCB电路板设计,首先要完成电路原理图设计.第一步,介绍原理图绘制环境的设置,并深入讨论原理图绘制.原理图绘制流程原理图设计规划环境参数设置(原理图绘制的)所需元器件库的安装绘制原理图导出原理图的设计到PCB设计项目。原理图绘制流程“原理图”作为“电子系统设计......
  • 电磁波类传感器原理
     毫米波雷达、激光雷达、热成像相机以及可见光相机都是接收电磁波的传感器,本质上他们都属于电磁波类传感器。电磁波有波粒二相性,波长越长,波动性越强,探测范围越广,绕射能力越强,能量越低。需要说明一点,这类传感器中,粒子描述物体的尺度是很小的,波描述物体的尺度是较大的,所以粒子性......
  • 深入理解 Vue.js 中的 nextTick:原理与应用
    深入理解Vue.js中的nextTick:原理与应用在使用Vue.js开发复杂的前端应用时,你可能会遇到这样一种情况:你希望在数据更新后立即执行某些操作,但发现DOM并没有如预期那样立即更新。这时,nextTick就派上用场了。本文将深入探讨nextTick的原理、应用场景以及一些实用的代码示例......
  • 音视频同步原理及实现(转载)
    #音视频同步原理及实现本文主要描述音视频同步原理,及常见的音视频同步方案,并以代码示例,展示如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放。内容如下:*1.音视频同步简单介绍*2.DTS和PTS简介*2.1I/P/B帧*2.2时间戳DTS、PTS*3.常用同步策略*4.音视......
  • [Java基础]HashMap
    HashSet基于哈希表实现的无序集合,它使用哈希算法来存储和检索元素。下面是向HashSet中加入元素的过程:计算哈希码(HashCode):当你向HashSet中添加一个元素时,首先会调用该元素的hashCode()方法,得到元素的哈希码。如果元素为null,则它的哈希码为0。映射到桶位置(BucketP......
  • 哈希表原理
    哈希表(键值对)键(key):类似于数组的下标,可以为任意类型,但是不能重复值(val):类似于数组的元素,可以为任意类型哈希表不存在元素访问溢出的情况,只要访问未创建的元素,便会创建一个值为0的键值对哈希表的插入://方法一:【】法(中括号法)//方法二:insert()函数插入法#include<iostream......
  • 【笔记】Nmap工具原理探索
    【笔记】Nmap工具原理探索原文章:【THM】Nmap(Nmap工具使用简介)-学习-Hekeatsll-博客园(cnblogs.com)Nmap是一款跨平台的开源端口扫描软件,它用来扫描计算机的开放端口,以确定运行的网络服务,并推断出计算机运行的操作系统Nmap三种基本扫描类型TCP连接扫描(-sT)工作原理:通过......
  • 雷达1——基本原理
    雷达1——基本原理1雷达的原理以及基本组成1.1雷达工作原理简介雷达是利用目标对电磁波的反射(或称为二次散射)现象来发现目标标并测定其位置的。当雷达探测到目标后,就要从目标标回波中提取有关信息:可对目标的距离和空间角度定位,目标位置的变化率可由其距离和角度随时......
  • 【AI原理解析】—KAN原理
    目录一、理论基础与数学表示二、网络结构与特点1.权重与激活函数的创新2.节点与边的角色3.B样条表示三、学习机制与训练过程四、优势与应用1.优势2.应用五、未来展望Kolmogorov-ArnoldNetworks(KANs)是一种创新的神经网络架构,其独特的设计使其在处理复杂函数......
  • 浏览器工作原理
    摘要本文是学习极客时间上的课程,进而整理出的浏览器工作原理。第一部分:浏览器的进程和线程(1)进程和线程的区别?在浏览器中,各个进程负责处理自己的事情,而不同的进程中,也有线程之间相互配合,所以在了解浏览器的工作原理之前,要明白进程和线程之间的区别。线程不能单独存在,它要由进......