HashMap解析——HashMap的put方法返回值

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

首先,看一下源码:

 

 

public V put(K paramK, V paramV)
  {
    if (paramK == null) {
      return putForNullKey(paramV);
    }
    int i = hash(paramK.hashCode());
    int j = indexFor(i, this.table.length);
    for (Entry localEntry = this.table[j]; localEntry != null; localEntry = localEntry.next)
    {
      Object localObject1;
      if ((localEntry.hash == i) && (((localObject1 = localEntry.key) == paramK) || (paramK.equals(localObject1))))
      {
        Object localObject2 = localEntry.value;
        localEntry.value = paramV;
        localEntry.recordAccess(this);
        return localObject2;
      }
    }
    this.modCount += 1;
    addEntry(i, paramK, paramV, j);
    return null;
  }


好吧,看不懂没关系,下面看例子:

 

 

import java.util.HashMap;
import java.util.Map;


public class Test {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		String p1 = map.put("11", "22");
		System.out.println("p1:" + p1);

		String p2 = map.put("33", "44");
		System.out.println("p2:" + p2);

		String value1 = map.get("11");
		System.out.println("value1:" + value1);

		String p3 = map.put("11", "44");
		System.out.println("p3:" + p3);

		String value2 = map.get("11");
		System.out.println("value2:" + value2);
	}
}


输出结果:

 

 

p1:null
p2:null
value1:22
p3:22
value2:44


说明:put方法返回值为null或者value;

 

如果key没有重复,put成功,则返回null,如p1、p2;

如果key重复了,返回的是map.get(key),也就是当前这个key对应的value,如上面的p3,key="11",而p1的key也是"11",p1与p3重复,返回的是p1的value="22",并且将p3覆盖掉p1

 

 

 

 

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

相关推荐

说一下HashMap的put方法

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

weixin_38289612的博客 1948

HashMap的put方法

Java HashMap的put方法介绍,源码解析,深入了解HashMap的put操作流程

AAAWell的博客 9244

HashMap中put()方法实现原理

突然想解剖HashMap实现原理,Map链表的作者源码如何实现?也可以丰富一下自己的编程思想,也想让读者看见如何观看别人源码的思路和方法。所以心血来潮的我,就来解析HashMap底层原理! 送给读者的话:一个合格的程序员一定要学会观看别人代码。这样子自己的开发也会很多思路和方法。希望国内软件开发越来越好。 首先看类 public class HashMap&lt;K,V&gt; ...

weixin_40536930的博客 5516

Java基础知识九:Map集合基本介绍、Map集合put()方法、获取Map集合键值元素3种方式,HashMap集合讲解与案例分析,Collections常用3个方法与对ArrayList集合进行排序

Map集合 1、Map集合:添加方法:put( ) //Map的基本使用 public classmapDemo1{ public static voidmain(String[]args) { //Map集合中键、值对应 //put()方法添加元素 // 键有重复时,put()方法会把后面的值替换前面的值 Map<String,String>map=newHashMap<>(); ...

分享Java技术知识,共同成长进步! 8647

5分钟搞定!用ZLMediaKit搭建GB28181视频监控系统(含避坑指南)

本文提供了一份基于ZLMediaKit搭建GB28181视频监控系统的实战指南。文章详细介绍了从环境准备、核心组件(ZLMediaKit与SIP服务器)部署、摄像头配置到内外网穿透的完整流程,并重点分享了设备ID配置、防火墙设置等关键避坑经验,帮助开发者快速构建稳定可控的监控平台。

apple5的专栏 1085

双有源桥变换器(DAB)TPS控制:从理论建模到Simulink/PSIM仿真实践

本文深入探讨了双有源桥变换器(DAB)的三重移相(TPS)控制技术,从理论建模到仿真实现。文章详细分析了TPS相比SPS和DPS的优势,阐述了其12种工况的划分逻辑与电流应力最优调制策略,并提供了在Simulink和PSIM平台搭建仿真模型的详细步骤与实战经验,帮助工程师掌握这一高效控制方法。

white的博客 584

HashMap put()方法返回值解析

Map 存储k-v 对时的返回值: public static void main(String[] args) { Map&lt;String,String&gt; m= new HashMap&lt;String,String&gt;(); String s1= m.put("001","zhangsan"); String s2=m.pu...

donkeyboy001的博客 1891

第3章 信息技术服务(一)

对 第三章 《信息技术服务》中第一、二、三节 <内涵与外延、原理与组成、服务生命周期>进行总结、归纳

好好学习,天天向上的博客 733

力扣(同构字符串解析)——学习到HashMap的put方法返回值

如图,该题的本质其实就是寻找相同字符的位置是否一样 遍历这个字符串的每个字符,并将其下标位置存入map中,如果字符重复,则将下标位置进行替换 同时比较每个字符的位置,如果重复字符的位置不一样,则映射关系不成立 HashMap的put方法返回值 put方法返回值为null或者value; 如果key没有重复,put成功,则返回null 如果key重复了,返回的是map.get(key),也就是当前这个key对应的value,同时覆盖掉当前value ......

想着百万年薪努力的小赵 544

优化NEXYS A7开发板(Xilinx Artix-7)Microblaze核的FLASH读写性能实战

本文针对NEXYS A7开发板(Xilinx Artix-7)上Microblaze核读写FLASH速度慢的问题,提供了系统性的优化实战指南。通过深入分析SPI控制器配置、Flash指令模式选择、Microblaze核的Cache与硬件加速器优化,以及程序运行位置(BRAM vs DDR)的调整,有效将FLASH读写性能从“龟速”提升至接近理论峰值。文章结合实测数据,为FPGA嵌入式开发者提供了清晰的性能瓶颈分析与解决方案。

carrot的博客 257

Xilinx FPGA 100G RDMA开发实战:基于AXI Lite配置的ROCE V2高速通信系统搭建

本文详细介绍了在Xilinx FPGA上搭建100G ROCE V2高速通信系统的实战过程。通过分析RDMA技术优势与FPGA实现的必要性,重点阐述了基于AXI Lite接口配置ERNIC IP核的关键步骤,包括硬件系统构建、驱动开发及与商用网卡的互通测试,旨在实现兼具高性能与灵活性的网络加速方案。

js777的博客 576

java map put返回值_HashMap的put方法返回值问题

API文档中的描述:先看一个例子Map map = new HashMap();System.out.println(map.put('a', 0)); //nullSystem.out.println(map.put('a', 1)); //0System.out.println(map.put('a', 2)); //1System.out.println(map.put('b', 1)); ...

weixin_34698515的博客 1425

基于YOLO的智能视频监控异常行为检测研究:从算法原理到落地部署的全栈实践

本文深入探讨如何利用 YOLO(You Only Look Once)系列算法构建一套端到端的异常行为检测系统。文章首先回顾 YOLOv8 在时空建模上的局限,然后提出“YOLO-STA(Spatio-Temporal Aggregation)”轻量级改进框架,在公开数据集 UCF-Crime 上将异常行为检测的 mAP@0.5 从 72.4 提升到 80.1;接着给出完整训练、推理、部署的 Python 代码(PyTorch + TensorRT),并介绍如何仅用 4 GB 显存的 Jetson Xavi

博客 1329

HashMap的put方法返回值问题

https://www.cnblogs.com/zeroingToOne/p/8607681.html Map<Character, Integer> map = new HashMap<Character, Integer>(); System.out.println(map.put('a', 0)); // null System.out.println(map.put('a', 1)); // 0 System.out.println(map.put('a', 2)); //

weixin_44769957的博客 1593

Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题

以前我们使用Unity开发VR,Unity提供了非常便利的插件和工具来做VR。但是由于Unity的渲染效果不如Unreal,现在我们改用Unreal来做VR了,所有的VR相关的配置和操作都要重新学习。今天就来总结一下,我在开发VR过程中碰到的所有问题。好了,以上就是我目前做VR时碰到的一些问题,希望对你有所帮助。

TxNet 2482

1-Wire 单总线硬件结构及软件时序分析(实测波形+C代码分析)

1根线就可以通信,是不是很神奇?因为其节省I/O口的优点而被广泛使用!

记得诚 1万+

HashMap源码方法

当tab的大小小于64时只是会调用一次resize方法。将数组进行扩容,所以并不只有数据到达阈值才会扩容。当链表长度达到树化时也会。

m0_65470938的博客 470

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hashMap 1.7

JDK1.7- 数组+链表 1.HashMap.put 返回值是原本的value, 如果当前的key是第一次插入,则返回的是null 2.HashMap 插入在链表的时候,是头插入法。Node.next=arr[index] arr[index]=Node; 2.1 头插入会对每次扩容的时候,起作用。扩容的数组的链表和旧数组的链表的顺序是相反的。 3.注意: 在 put操作的时候,如果先要判断key是否存在,这里要进行遍历, 如果key存在,就把当前的key对应的value...

NULLprointex的博客 210

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

浅析hashmap的put()方法

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

及时雨的csdn 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

解析HashMap中的put方法

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

。。。 6740

源码解析HashMap的put方法

本篇文章将从源码的角度来很详细地讲解HashMap中put方法的执行流程。

深夜无眠的博客 1904

图解hashmap的put方法

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

百味皆苦的博客 2万+

你知道HashMap的put方法返回值是啥吗

public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = hash(key); int i = in...

insomsia的博客 917
上一篇: 我的Java后端书架
下一篇: Java基础——重载和重写
冷静BB
博客等级 码龄12年 298粉丝 112原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值