Map (五) HashMap get()

HashMap之get方法详解 1. 导读 本章节面相的是对红黑树有了解的读者, 因为JAVA引入了黑红树, 所以后面的内容中主要围绕着红黑树来展开; .1 get .2 find 2. get HashMap::get返回一个数据节点, 如果不存在则返回空; final Node<K,V> getNode(int hash, Object key) { Node<K,V>[] t... 阅读详情

首先打开源码:

    public V get(Object key) {
        Node<K,V> e;
        return (e = getNode(hash(key), key)) == null ? null : e.value;
    }

可以看到,get() 主要方法还是调用 getNode() 所以我们重点看一下这个方法:

    final Node<K,V> getNode(int hash, Object key) {
        Node<K,V>[] tab; Node<K,V> first, e; int n; K k;
        if ((tab = table) != null && (n = tab.length) > 0 &&
            (first = tab[(n - 1) & hash]) != null) {
            if (first.hash == hash && // always check first node
                ((k = first.key) == key || (key != null && key.equals(k))))
                return first;
            if ((e = first.next) != null) {
                if (first instanceof TreeNode)
                    return ((TreeNode<K,V>)first).getTreeNode(hash, key);
                do {
                    if (e.hash == hash &&
                        ((k = e.key) == key || (key != null && key.equals(k))))
                        return e;
                } while ((e = e.next) != null);
            }
        }
        return null;
    }

如果看过前面几篇文章,看到 get() 方法以后会觉得如此简单。流程:

  1. 判断数组是否不为null,数组长度是否大于0,使用 hash 计算当前存储位置是否有元素
  2. 判断当前位置存放的元素是否相同
  3. 判断当前位置存放的元素是否有 next ,即下一个元素
  4. 判断当前位置存放的是否是红黑树
  5. 遍历链表
  6. 如果都找不到相同的 key 就是返回 null

看完前面复杂的 put() 和 resize() 方法以后,感觉 get() 方法是最为简单的。明白了前面两个方法,在看这个方法一看就知道什么意思啦。所以在这里我就不多说了,不明白的先看看前面的几篇哦。

如果有那些讲的不好或者讲的不仔细的地方,欢迎评论留言。


Map (一) HashMap 构造函数的秘密
Map (二) HashMap put()方法详细解刨
Map (三) HashMap 如何利用 hash 计算存储位置
Map (四) HashMap 已故事的角度理解 resize()
Map (五) HashMap get()

Map中的值自增自减或重新操作值的最优雅写法,无需调用get()和put(),包含HashMap compute()源码分析 Map中的值自增自减或重新操作值的最优雅写法,无需调用get()和put() 相信各位在开发的过程中总能遇见类似这样的需求:查询Map中的某一key值,如果有就将值加一,没有就put新的key值为1 (或对值进行其他操作)。 通常大多数人的写法是这样的: @Test public void test1() { HashMap<Integer, Integer> map = new HashMap(); map.put(1, 10); // {1=1 阅读详情

相关推荐

使用Map.of()导致的空指针问题

Map.of()使用get()空指针问题

Horizon_dong的博客 1320

Java Map get()用法及代码示例

Java中的Map接口的get()方法用于检索或获取由参数中提到的特定键映射的值。当映射不包含键的此类映射时,它将返回NULL。参数:该方法采用对象类型的一个参数key_element,表示应该获取其关联值的键。注意:可以对具有不同数据类型的变化和组合的任何类型的映射执行相同的操作。返回值:该方法返回与此Map集合中的key_element关联的值。示例1:将字符串值映射到整数键。示例2:将整数值映射到字符串键。...

m0_67400973的博客 5948

UR5双臂Gazebo仿真(Python)

近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle

qq_42823342的博客 2233

Map.get、Map.set、Map.has方法

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。(2)set() 方法为Map对象添加一个指定键(key)和值(value)的新元素。(3)has() 返回一个bool值,用来表明map 中是否存在指定元素。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。(1)get() 方法用来获取一个 Map 对象中指定的元素。

m0_54849806的博客 2710

RPA 财务共享中心与RPA赋能

在和集团财务官交流的时候,客户经常会提到FSSC,其中有准备建立FSSC,正在建立FSSC,以及已建成FSSC正使用的,当中会有些对FSSC的疑虑和问题,所以花费些时间对FSSC进行了深入调研,从而也有幸拜读了王兴山、陈剑、梅震、钱自严等专业人士写的几本关于FSSC的书,对FSSC的前因后果有了更深入的认识,同时结合自己在FSSC的一些项目经验,故做了本次分享。 本文章主要分享财务共享中心以及R...

weixin_40244959的博客 2756

莆田市C++专项选拔第一轮题4

现在小明同学想要从两堆硬币中各选择一枚硬币,使得两枚硬币的面值之和 不超过 k。不同的硬币组合,就算面值相同,也视为不同的方案。现在他把这些硬币分成了两堆,已知两堆硬币分别有 n 和 m 枚硬币。可选方案有: (1,2), (1,1), (1,1), (5,2), (5,1), (5,1),共 6 种。第一行三个整数 n, m, k,分别表示第一堆硬币的数量,第二堆硬币的数量,以及面值之和的上限。对于30%的数据,1 ≤ n , m ≤ 1000 , 1 ≤ b , c ≤ 1000。

lpstudio的博客 924

hashmap java get方法_Java HashMap get()用法及代码示例

HashMap类的java.util.HashMap.get()方法用于检索或获取由参数中提到的特定键映射的值。当映射不包含键的此类映射时,它将返回NULL。用法:Hash_Map.get(Object key_element)参数:该方法采用对象类型的一个参数key_element,表示应该获取其关联值的键。返回值:该方法返回与参数中的key_element关联的值。以下程序说明了java.ut...

weixin_42467373的博客 1105

VGA系列之一:VGA显示网络图片

VGA系列之一:VGA显示网络图片VGA系列之一VGA显示网络图片 1 如何用FPGA实现VGA显示 2 网络图片和VGA显示有何区别 3VGA如何显示图片

善良の一休君的博客 1万+

Java — Map.keySet()、Map.put()、Map.get()【Map类、Set类】

首先,不要慌,大家来看一下API的介绍,最后会用一个代码例子进行解析: 一丶 Map<K,V> Interface Map<K,V> 参数类型 K - 由此地图维护的键的类型 V - 映射值的类型 All Known Subinterfaces: Bindings , ConcurrentMap <K,V>, ConcurrentNavigableMap &lt...

qq_27494201的博客 4314

PCL 欧式聚类分割【2026最新版】

PCL中欧式聚类提取算法原理详解、代码实现以及一个大自然场景地物分割提取并保存分割结果到本地文件夹的应用案例。

点云侠的博客 40万+

Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解

Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 517

HashMap中get()、put()详解

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。HashMap 如果再次添加相同的key值,它会覆盖key值所对应的内容。HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

a13641376265的博客 1080

Centos 7 Linux 安装单机 Hadoop(HDFS):下载、安装、配置、测试

本文详细介绍了在 CentOS 7 系统上安装与配置单机 Hadoop(HDFS)的完整流程,涵盖 JDK 环境准备、Hadoop 安装包下载与部署、核心配置文件(core-site.xml、hdfs-site.xml 等)修改、SSH 免密登录设置、HDFS 格式化及服务启动,并通过命令行与 Web 界面验证 HDFS 和 YARN 功能,适合 Hadoop 初学者快速搭建本地测试环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 3235

java map.get_Java Map get()用法及代码示例

Java中的Map接口的get()方法用于检索或获取由参数中提到的特定键映射的值。当映射不包含键的此类映射时,它将返回NULL。用法:thisMap.get(Object key_element)参数:该方法采用对象类型的一个参数key_element,表示应该获取其关联值的键。返回值:该方法返回与此Map集合中的key_element关联的值。以下程序说明了java.util.Map.get()...

weixin_42129970的博客 6749

第五章 TTM 后备管理:5.6系统内存域

系统内存域由 TTM 内置资源管理器管理,通过 ttm_tt 承载页信息,依赖 ttm_pool 提供物理页。ttm_tt 管理页数组、缓存属性与状态标志,支持外部页与换出机制。初始化分 ttm_tt_init 与 ttm_sg_tt_init,生命周期包括创建、填充、释放与销毁。页池针对 write-combined、uncached 及一致性 DMA 分配的页进行缓存,提升性能并减少 TLB 刷新。分配时高阶优先、批量设置缓存属性,回收时清零后归还池中,确保高效复用。

图形/计算GPU的驱动与虚拟化技术分享园地 2561

OV9734 DATASHEET,完整规格书

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

HashMap的get()方法的NullPointerException

HashMap的get()方法的NullPointerException @author:Jingdai @date:2020.12.07 今天写代码发现一个 bug,HashMap的 get() 方法一直报空指针异常,现记录一下。 看下面代码。 private HashMap<Integer, Integer> cache; private LinkedList<Integer> keyList; private int capacity; public LRUCache(i

qq_41512783的博客 3386

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Map集合类——HashMap

Map集合 Map集合存储的是键值对 Map集合的实现类:HashTable、LinkedHashMap、HashMap、TreeMap 1、HashMap 1.1、基础了解: 1、键不可以重复,值可以重复; 2、底层使用哈希表实现; 3、线程不安全; 4、允许key为null,但只允许有一条记录为null,value也可以为null,允许多条记录为null; 1.2、源码分析 (一)以...

代码学习之路的博客 9614

VC中sqlite的使用

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

Map和HashMap

在项目中有一句这样的代码: Map<String, Object> mapData = new HashMap<>(); 不太理解是什么意思,上网浏览解决完后总结一下。 Map接口 java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。 Map是一种 键-值对(key-value) 集合,Map集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数

qq_44896028的博客 4894

hashmap java get方法_Java中HashMap的get()方法: HashMap.get() - Break易站

Java中的HashMapHashMap类的java.util.HashMap.get()方法用于检索或获取由参数中提到的特定键映射的值。当地图不包含密钥的这种映射时,它返回NULL。句法:Hash_Map.get(Object key_element)参数:该方法采用对象类型的一个参数key_element,并引用应该获取其关联值的键。返回值:该方法返回与参数中的key_element关联的值。...

weixin_29928971的博客 847

Map接口实现类HashMap、Map.Entry接口

来谈谈集合中的Map接口,它常用的实现类为HashMap。 Map接口 除了类集,Java 2还在java.util中增加了映射。 映射(map)是一个存储关键字和值的关联 或者说是关键字/值对的对象。给定一个关 键字,可以得到它的值。关键字和值都是 对象。关键字必须是唯一的。但值是可以 重复的。有些映射可以接收null关键字和 null值。而有的则不行 Map接口映射唯一关键字到值。关键字(ke

柠檬2312的博客 2070

HashMap剖析之put()和get()方法

前言 本文是基于Java 8的HashMap进行分析,主要是分析HashMap中的put()和get()方法。 下面将会分析这部分的源码,如果觉得源码分析内容太啰嗦,可以跳过源码部分,直接看源码下面的总结。 put()方法源码分析 HashMap的put()方法是我们最常用的方法,但是put()方法是怎么工作的呢? put()方法 /** * HashMap的put()方法支持k...

2的32次方 866

HashMap 的 put() 和 get() 方法工作原理

HashMap 的 put() 和 get() 方法是其核心功能,它们通过计算哈希码和索引来快速地存储和检索数据。理解这些方法的内部工作原理对于有效地使用 HashMap 至关重要。

心猿意码 956

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

hashmap示例 HashMap类的get()方法 (HashMap Class get() method) get() method is available in java.util package. get()方法在java.util包中可用。 get() method is used to get the value element associated with the given...

cumt30111的博客 881

java map get_Java HashMap get() 方法

get() 方法获取指定 key 对应对 value。语法get() 方法的语法为:hashmap.get(Object key)注:hashmap 是 HashMap 类的一个对象。参数说明:key – 键返回值回与指定 key 所关联的 value。实例以下实例演示了 get() 方法的使用:import java.util.HashMap;class Main {public static ...

weixin_32098191的博客 497

Jdk1.8 HashMap中get()方法源码分析

1.说明,这里主要对jdk1.8的HashMap的get方法进行源码分析 2.本文章基于上一篇《Jdk1.8 HashMap中put()方法源码分析》 添加链接描述 3.测试源码贴这里 package com.yuhl.map; import java.util.HashMap; /** * @author yuhl * @Date 2020/10/19 23:02 * @Classname HashMap * @Description 剖析HashMap源码 */ public class

前路无畏的博客 1万+
上一篇: Map (四) HashMap 已故事的角度理解 resize()
下一篇: IDEA 为 sql 文件配置方言
Carey丶zsh
博客等级 码龄10年 15粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值