HashMap的实现原理及其特点

article/2025/11/9 12:50:51

1) HashMap可以接受null键值和值,而HashTable则不能,HashMap是非synchronized的;存储的是键值对。

2) HashMap是基于hashing原理,使用put(key,value)存储对象到HashMap中,使用get(key)HashMap中获取对象,当我们给put方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来存储键对象和值对象,作为Map.Entry.


3) 如果两个对象hashCode相同:

存储时:他们会找到相同的bucket位置,发生碰撞,因为HashMap使用链表存储对象(每个Map.Entry都有一个next指针),这个Entry会存储在链表中。

获取时:会用hashCode找到bucket位置,然后调用key.equals()方法找到链表中正确的节点.最终找到要找的值对象.

减少碰撞:使用final修饰的对象、或不可变的对象作为键,使用(IntegerString)(是不可变、final,而且已经重写了equalshashCode方法)这样的wrapper类作为键是非常好的,(我们可以使用自定义的对象作为键吗?答:当然可以,只要它遵守了equalshashCode方法定义规则,并且当对象插入到Map中之后将不会再改变。)

4) HashMap负载因子默认是0.75,可设置,当map填满了75%bucket时候,将会创建原来HashMap大小两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中,这个过程叫做rehashing,因为它调用hash方法找到新的bucket位置。

5) 重新调整map大小可能会发生竞争问题:如果两个线程都发现HashMap需要调整大小了,它们都会尝试进行调整,在调整中,存储在链表中的元素的次序会反过来,因为移动bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历,如果条件竞争发生了,就死循环了。


http://chatgpt.dhexx.cn/article/e0xjgYV4.shtml

相关文章

说一下HashMap的实现原理?

点击上方蓝色“趣学程序”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 回复“加群”与更多小伙伴共同成长! 回复“源码”获取专属项目源码! 本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然…

HashMap的实现原理和底层数据结构

看了下JAVA里面有HashMap、Hashtable、HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和HashMap、Hashtable的区别 HashMap和Hashtable的实现原理 HashMap的简化实现MyHashMap HashMap和Hashtable的…

HashMap底层实现原理

HashMap实现原理 1.概述 HashMap是基于哈希表的Map接口的非同步实现。元素以键值对的形式存放,并且允许null键和null值,因为key值唯一(不能重复),因此,null键只有一个。另外,hashmap不保证元素…

hashMap实现原理

1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的)。此实现提供所有可选的映射操作,并允许使用null值和null键…

HashMap的实现原理和底层结构

哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现…

【java】HashMap底层实现原理

目录 一.哈希表(散列)1.什么是哈希表2.什么是哈希冲突(面试题)3.解决哈希冲突的方法(面试题)(1) 开放地址法① 线性探查②二次探查③随机探查 (2) 再哈希法(3) 链地址法(4)建立公共溢出区 二.HashMap1.HashMap的hash()算法(面试)(1)为什么不是h key.hashCode()直接返回&#x…

HashMap底层实现原理解析

一、HashMap底层实现原理解析 我们常见的有数据结构有三种结构: 数组结构链表结构哈希表结构 下面我们来看看各自的数据结构的特点: 1)数组结构: 存储区间连续、内存占用严重、空间复杂度大 优点:随机读取和修改效…

HashMap底层实现原理概述

1. 前言 在一场面试中最能打动面试官的其实是细节,候选人对细节的了解程度决定了留给面试官的印象到底是“基础扎实”还是“基础薄弱”,如果候选人能够举一反三主动阐述自己对一些技术细节的理解和总结,那无疑是面试过程中的一大亮点。HashM…

HashMap实现原理分析

之前转载过一篇HashMap相关分析文章,快速链接:HashMap实现原理分析 既然有前辈已经将源码分析总结了出来,我们在继续学习研究源码实现的时候不妨借鉴借鉴前人的总结与经验~ 本文转自:https://blog.csdn.net/hefenglian/article/…

HashMap面试,看这一篇就够了

历史热门文章: 七种方式教你在SpringBoot初始化时搞点事情 Java序列化的这三个坑千万要小心可以和面试官聊半个小时的volatile原理Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理…

java中HashMap原理

1、为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized&a…

HashMap的实现原理

1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 在java编程语言中,最基本的结构就是两种,一个…

软件测试用例分析和用例设计

测试用例的概念 测试用例(test case),也叫测试案例,是为了达到一个最佳的测试效果或者高效的发现软件中的隐藏错误(缺陷)而精心设计的包括场景步骤和数据。 通用的定义:是关于一个功能验证时候…

软件测试用例设计练习

1、完成163邮箱注册用例的编写 邮箱地址:6~18个字符,可使用字母、数字、下划线,需要以字母开头 密码:8~16个字符,大、小写字母、数字、标点符号,3种或以上组合 2、需求:输入三条边&#xff…

软件测试用例详细规范

软件测试用例详细规范 为什么编写测试用例详细测试用例模板测试用例字段介绍用例操作步骤用例预期结果: 测试用例录入原则:测试用例设计步骤测试用例案例:测试用例校验点: 为什么编写测试用例 我也不知道,自己百度 详…

软件测试——测试用例设计方法

1、测试用例定义 测试用例又叫test case,是为某个特殊目标而编制的一组测试输入,执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。 2、测试用例的特性 有效性:测试用例能够被使用,且被不同人…

接口测试用例怎么写?

测试流程 需求规格说明书--测试计划--测试用例--用例评审--开发 接口文档--接口分析--接口用例设计--评审--接口测试执行(关注数据库)--前后端对接 系统界面测试--测试结束 如何设计接口测试用例? 1.接口正常调用,先要能跑通…

软件测试 - 用例篇

回顾上一篇博客主要内容:软件测试 - 基础篇 1: 软件测试的流程是什么? 需求分析,测试计划,测试设计/测试开发,测试执行,测试报告 需求分析 分析需求,验证需求的正确性和合理性,从需求中提取出测试项 测试计划 要考虑测试人数,测试环境,测试时间,测试设备等 测试设计/测试开发 …

软件测试用例优先级,软件测试用例的优先级划分方法

随着互联网的不断发展,程序员对于软件品质以及运行状况等参数关注程度也在提高,而今天我们就一起来了解一下,在划分测试用例优先级的时候都有哪些划分方法可以使用。 没有软件系统是完美的,任何系统都有BUGS。但是每一次得迭代都有…

软件测试:测试用例

一、通用测试用例八要素  1、用例编号;  2、测试项目;  3、测试标题;  4、重要级别;  5、预置条件;  6、测试输入;  7、操作步骤;  8、预期输出 二、具体分析通用测试用例八要…