HashMap的put方法

说一下HashMapput方法 文章目录前言一、HashMap是什么?二、HashMapput方法1.HashMap中的基本属性2.put方法总结 前言 日常开发中经常使用到HashMapput方法,本章就从HashMap的源码分析put方法的原理 提示:以下是本篇文章正文内容,下面案例可供参考 一、HashMap是什么? 简单的理解,HashMap就是一个存放k,v键值对的容器 二、HashMapput方法 1.HashMap中的基本属性 从源码中可以看到,继承了AbstractMap,同时实现了Map,Cloneabl.. 阅读详情

HashMap 在JDK1.8中的put方法:

1、首先put方法接收到key和value时会根据put的key值进行hash运算得到key对应的哈希值;

 

 这里,我们顺便学习下几个运算符号:

        >>>:无符号右移 无论最高位是0还是1,左边补齐0

       在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以21次方,左移n位就相当于乘以2n次方,右移一位相当于除2,右移n位相当于除以2n次方。

       ^:按位异或,若参加运算的两个二进制位值相同则为0,否则为1;

这一步的目的可以认为是将key的哈希值与其无符号右移16位后的值进行异或运算(即将hashCode的低16位与高16位进行异或),使哈希值更加的散列。

2、然后再调用putVal() 方法:

3、先是通过获取的哈希值与(数组长度-1)进行与运算得到一个数组下标;

(&:按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0;)

(p = tab[i = (n - 1) & hash])

4、然后判断此下标位置是不是空着,如果空着,则直接把key和value封装为一个Node对象并存入此数组位置;

5、如果此下标位置元素非空,说明此位置上存在Node对象,那么则判断该Node对象是不是一个红黑树节点,如果是,则将key和value封装成一个红黑树节点,并添加到红黑树上去,在这个过程还会判断红黑树中是否存在当前key,如果存在则更新相应的value;

 

6、如果此位置上的Node对象时链表节点,则将key和value封装为一个链表的节点并插入到链表中去; 

7、插入到链表后,会判断链表的节点个数是不是超过了8个,如果超过了8个,同时,链表容量大于或等于 MIN_TREEIFY_CAPACITY(默认64)的条件,则把当前位置的链表转化为红黑树;否则,如果容器中的节点太多,则会调整表的大小。

 

(插入链表使用的是尾插法,所以需要遍历链表,在这个过程中会判断key是否存在,如果存在则更新相应的value。)

8、最后判断当前HashMap是否超过阈值,如果超过,则进行扩容操作。

 

深入解析 HashMapput() 方法及其相关实现 Java 编程中,HashMap 是一个非常常用且高效的集合类,用于存储键值对。它基于哈希表实现,提供了快速的插入、删除和查找操作。本文将深入探讨 HashMapput() 方法及其相关的核心内部方法,包括如何处理哈希冲突、链表到红黑树的转换以及扩容机制。通过理解这些细节,你将能够更好地利用 HashMap 来优化你的应用程序,并解决可能出现的性能问题。先来看下hashMap插入数据的大致流程,以便我们接下来理解源码。 阅读详情

相关推荐

hashma的put 方法总结

Hashmap put 方法流程图 HashMapput方法流程总结 1、put(key, value)中直接调用了内部的putVal方法,并且先对key进行了hash操作; 2、putVal方法中,先检查HashMap数据结构中的索引数组表是否位空,如果是的话则进行一次resize操作; 3、以HashMap索引数组表的长度减一与key的hash值进行与运算,得出在数组中的索引,如果索引指定的位置值为空,则新建一个k-v的新节点; 4、如果不满足的3的条件,则说明索引指定的数组位置的已经存在内容,这个

zhangqiang180的博客 2131

HashMapput方法(白话加源码分析)

一.首先不看代码用白话分析一下流程 我们在使用put方法的时候会传进key和value参数 在我们将这两个参数传入后, 第一步,我们的put方法会去判断这个hashmap是否为null 或者长度是否为0,如果是则对hashmap数组进行resize()扩容, 第二步,put方法会根据这个key计算hash码来得到数组的位置,(这里需要解释一下,我们的hashmap默认是由一个数组加链表组成的) 得到位置后当然是继续判断这个数组下标的值是否为null,为null 自然是直接插入我们的value值,如

IAMZTDSF的博客 9870

施耐德EcoStruxure平台深度体验:IEC 61499在智慧物流中心的真实应用案例解析

本文深度解析施耐德EcoStruxure平台在智慧物流中心的应用,重点探讨IEC 61499标准如何通过分布式控制和功能块技术重构自动化逻辑。通过上海某物流中心的真实案例,展示了该平台在提升系统弹性、降低停机成本方面的显著成效,为工业自动化转型提供实践参考。

weixin_30576827的博客 47

HashMap中的put方法

1、put操作可以覆盖原来的value,前提条件就是hash值相同且是同一个key,或者hash值相同且两个key equals。2、插入链表后,元素大于8个,将链表转成红黑树3、元素是放在链表的尾端4、插入后,size += 1,如果size > threshold,执行扩容,5、扩容时,对链表中的键值对重新计算桶索引,方法很巧妙。原来的链表会分裂为两个新链表,一个存放索引值不变的键值对,另一个存放索引值变化的键值对;并且键值对在新链表中的相对顺序没有变;

wming666的博客 3877

HashMapput方法原理

本篇内容基于JDK 1.8 一、HashMapput方法流程如下图 二、具体的源码分析 /** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value ...

逆流而上的龟 1万+

hashmapput方法

HashMap 首先呢 它是一个集合类,非线程安全,key、value(键值)对存储格式。常见的api有put,get,size,remove等方法 在此呢介绍一下jdk1.8中的hashmap.put方法, 我们在使用put方法的时候会传进key和value参数 在我们将这两个参数传入后, 第一步,我们的put方法会去判断这个hashmap是否为null 或者长度是否为0, 若为n...

weixin_38480293的博客 1万+

浅析hashmapput()方法

最近面试的时候,有面试官问到hashmapput()方法做了哪些事情,我觉得回答的不够好,特此好好研究下hashmap,并总结下. HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在...

及时雨的csdn 3万+

HashMapPut()和Get()方法原理

JDK1.7: get()方法 首先判断输入的key是否为空,如果为空,从hashmap数组下标为0的位置获取值返回 如果不为空,根据key的值,从hashmap数组中获取对应的entry对象,判断这个对象是否为空,为空返回null,不为空返回对应的value值, 获取value的方法中key为空和不为空时的方法里都先判断数组中的元素是否为0 ,如果不为0,才继续查找 // hashmap的...

kai3123919064的博客 1万+

图解hashmapput方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

百味皆苦的博客 2万+

HashMapput方法流程解读

说明:本文中所谈论的HashMap基于JDK 1.8版本源码进行分析和说明。 HashMapput方法算是HashMap中比较核心的功能了,复杂程度高但是算法巧妙,同时在上一版本的基础之上优化了存储结构,从链表逐步进化成了红黑树,以满足存取性能上的需要。本文逐行分析了put方法的执行流程,重点放在了对整个流程的把握,对于红黑树的执行逻辑只是点到为止,其实HashMap中还有很多细节算法...

weixin_30549657的博客 4957

hashmap put方法_Java HashMap put()方法与示例

hashmap put方法 HashMap类的put()方法 (HashMap Class put() method) put() method is available in java.util package. put()方法java.util包中可用。 put() method is used to link the given value element with the given k...

cumt951045的博客 3356

解析HashMap中的put方法

引言 在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法HashMap底层数据结构 先来了解一下HashMap底层的数据结构,它实质上是一个散列表,在数据结构课程中,我们应该都学习过散列表,它是通过关键码值而直接进行访问的一种数据结构,比如存储这样的一个序列:5,12,7,6,1,3。我们首先需要设定一个hash函数,通过该函数就能够定位每个元素存储的位置,比如ha

。。。 6717

HashMap是如何进行put操作的

判断table是否为空,如果空的话,会先调用resize扩容;根据当前key的 hash 值,通过 (n - 1) & hash计算应当存放在数组中的下标 index;查看 table[index] 是否存在数据,没有数据就构造一个 Node 节点存放在 table[index] 中;存在数据,说明发生了 hash 冲突,继续判断 key 是否相等,如果相等,用新的 value 替换原数据(这里onlyIfAbsent 为 false);

LYQ 4825

HashMap——HashMap中的put方法

如果我们直接使用key.hashCode()返回哈希值的话,在进行哈希位运算时(key&(capacity-1))时高位如果变动大的话,对哈希索引值hash的的计算结果的影响是较小的,故而产生哈希碰撞的概率就要大一点。0000 0000 0000 0000 0000 0000 0000 1111 length-1(进行位运算)0000 0000 0000 0000 0000 0000 0000 1111 length-1 进行位运算。2、根据哈希值计算出索引值hash找到哈希桶的位置。

Lemon_man_的博客 2529

Java-HashMapput()方法是如何实现的,内含详细流程图

HashMapJava中常用的数据结构之一,它提供了快速的键值对存取能力。本文将深入探究HashMapput方法的实现原理,解析其内部数据结构和算法,并探讨设计put方法的意义。

向诸位大佬虚心学习 7834

HashMapput方法详解

HashMap 属性 DEFAULT_INITIAL_CAPACITY = 16 默认初始化容量 DEFAULT_LOAD_FACTOR = 0.75 默认加载因子 TREEIFY_THERSHOLD = 8 最小转红黑树链表长度 UNTREEIFY_THERSHOLD = 6 红黑树退化长度标准 MIN_TREEIFY_CAPACITY = 64 最少转红黑树数组长度 HashMap的数据结构 Node节点是HashMap的静态内部类,HashMap的基本存储单位 static class Node

qq_43112598的博客 1626

Hashmap 的源码解析以及put流程

一.Hashmap的定义 Hashmap是一种常用的数据结构,底层是基于数组和链表实现的。 二.Hashmap的详情结构 2.1 数据结构 HashMap提供了三个构造函数: HashMap():构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMapHashMap(int initialCapacity):构造一个带指定初始容...

健康平安的活着的专栏 4903

HashMap中的put()方法

HashMap底层是由哈希表(数组),链表,红黑树构成,哈希表存储的类型是一个节点类型,哈希表默认长度为16,它不会每个位置都用,当哈希表中的元素个数大于等于负载因子(0.75)*哈希表长度就会扩容到原来的2倍。

qq_64782704的博客 706

JAVAHashMapput()方法执行流程

Java中,HashMap是一个常用的数据结构,它实现了Map接口,提供了高效的键值对存储和检索功能。put()方法HashMap中用于添加键值对的重要方法,其执行流程涉及哈希值计算、哈希桶索引定位、处理冲突、可能的扩容等关键步骤。了解put()方法的执行流程有助于理解HashMap的内部工作机制,从而更好地利用该数据结构来满足实际编程需求。通过深入了解HashMapput()方法执行流程,我们能够更好地理解其在存储和检索键值对时的内部运作方式。HashMap

AliceNo的博客 3084

AI工程化之生成式UI & A2UI(一)

本文系统介绍了生成式UI和Google A2UI技术。生成式UI通过AI直接生成前端代码(完全生成式)或DSL(混合式),实现千人千面的动态界面和研发提效。Google A2UI提出组件级和消息级协议,采用JSON规范实现渲染框架解耦,支持多端渲染。文章详细阐述了A2UI的架构设计,包括协议生成、服务端处理和渲染器实现,并对比了与传统前端框架的差异,指出A2UI本质是UI=F(AI(UI)+AI(state))的创新模式。最后通过playground项目展示了A2UI的实践应用。

qq_34306228的博客 549

基于STM32的智能仓储环境监测20250504(带讲解视频)(proteus8.15)

题目:基于STM32的智能仓储环境监测单片机选型STM32F103C8T6。温湿度传感器选型DHT11,光照传感器选型BH1750(光敏电阻)烟雾传感器选型MQ-2,(滑动变阻器模拟)显示屏选型OLED,报警模块选型有源报警,风扇(继电器+电机)加热(继电器+红灯)通风(舵机)按键(三个)WiFi模块选型ESP8266(虚拟终端+串口调试工具)功能:1、检测温度、湿度、光照、烟雾浓度2、设置光照、烟雾浓度阈值,超过阈值进行声光报警3、设置温度阈值,低于阈值加热,高于阈值开风扇4、设置湿度阈值,超过阈值通风5、oled显示温度、湿度、光照、烟雾浓度的数值6、手机端可以设置温度、湿度、光照、烟雾浓度的阈值、显示温度、湿度、光照、烟雾浓度的数值

上一篇: ArrayList和LinkedList区别是什么
下一篇: Java继承与重写
青鸟Will
博客等级 码龄9年 13粉丝 12原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值