hashmap java_Java – HashMap详细说明

hashmap java

HashMap基于哈希算法工作,根据Java文档HashMap具有以下四个构造函数,

建设者 描述
HashMap ​() 构造一个空的
具有默认初始容量(16)和默认加载因子(0.75)的HashMap
HashMap ​(int initialCapacity) 构造一个空的
具有指定初始容量和默认加载因子(0.75)的HashMap
HashMap ​(int initialCapacity,
float loadFactor)
构造一个空的
具有指定初始容量和负载因子的HashMap
HashMap ​( Map <? extends K ,? extends V > m) 构造一个新的
HashMap具有与指定相同的映射
Map

让我们编写一个简单的Java程序,以检查Map在内部如何工作

  1. 创建一个简单的Map并为其添加一个键和值
public static void main(String[] args) {Map<Integer, String> map = new HashMap<>();map.put(1, "Java");}

我们刚刚创建了简单映射,该映射将键作为整数,将值作为字符串,并添加了“ 1”作为键和“ Java”作为值。 通过使用eclipse调试功能,我们可以查看地图中的内容

它创建了16个块(0-15),并插入了第一个块,其键为整数“ 1”,值为字符串“ Java”。 请选中红色框,其余所有都用null初始化的框。

2.将第二个键和值添加到同一地图

public static void main(String[] args) {Map<Integer, String> map = new HashMap<>();map.put(1, "Java");map.put(2, "Angular");}

让我们再次在Eclipse调试中查看地图

现在,地图包含了两个键(1,2)和两个值(“ Java”,“ Angular”),但这些键分别分别精确地添加到了第一个块和第二个块,为什么?

因为我们知道Map是基于哈希算法工作的,所以每当我们插入要映射的键时,它都会根据hashCode()的值调用Object#hashcode()方法,它将把键插入该块中。

在上述情况下,Integer类使用其原始int值覆盖hashCode,这就是为什么(1,java)存储在第一个块中,而(2,Angular)存储在第二个块中的原因。

3.让我们对自己的班级做同样的实验

创建一个简单的Employee类,如下所示

private static class Employee{
int id;
String name;Employee(int id, String name){
this.id = id;
this.name = name;
}
}

使用此类作为地图的键,并以相同的方式进行检查

public static void main(String[] args) {
Map<Employee, String> map = new HashMap<>(10);
map.put(new Employee(1, "Ramesh"), "Java");
map.put(new Employee(2, "Sathish"), "Angular");
}

我们添加了两个键作为Employee对象,并将Values作为字符串添加,让我们看看这次存储在哪个块中的键

这次,将其存储在第8个块和第14个块中(为什么?由于Employee对象的hashCode而给出简单答案),以确认这一点,让Employee的hashCode()重写为常数并检查映射。 如果我们的分析正确,则必须将所有密钥存储在同一块中。

相应地更新Employee类

private static class Employee{
int id;
String name;
Employee(int id, String name){
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
return 10;
}
}

我们不需要对地图进行任何更改,现在让我们看看密钥的存储位置

是的,只有第10个块充满了两个对象,为什么? 因为两个雇员对象都返回相同的hashCode(即10)。 但是,Map如何识别这两个对象不是重复的? 我们从内部知道Map#Key是entrySet(java.util.Set),它调用equals方法来验证键是否重复。

同时从Map中检索值时,首先将检查给定键的hashCode,然后基于该哈希值将转到该块,在找到该块之后,它将调用equals()以获取确切值。

因此,完全不建议将hashCode()重写为constant当我们重写hashCode()时,我们也不要忘记重写equals()方法 (即hashCode()/ equals()合约)。

翻译自: https://www.javacodegeeks.com/2017/11/java-hashmap-detail-explanation.html

hashmap java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州电子厂房净化工程_简述设计电子车间净化工程的注意要点

在电子车间净化工程的设计、安装、选择净化设备与彩钢夹芯板的时候有哪些需要注意的要点呢?这些看起来不太重要的细节&#xff0c;却往往大大的影响了电子净化车间的净化效率与洁净度。而且这些注意要点&#xff0c;不仅在电子净化车间中适用&#xff0c;在食品加工厂、制药净…

使用log4j记录日志_使用log4j2免费分配日志记录

使用log4j记录日志介绍 最近&#xff0c;我正在为一个客户端工作&#xff0c;试图为大型精心制作的Java系统消除一些GC暂停。 经过分析后&#xff0c;我意识到大部分垃圾都是通过日志记录产生的&#xff01; 是否有一种简单的方法来删除所有分配&#xff1f; 原来有:) 我应该使…

Java Web工程结构_项目结构

文章目录Eclipse 的 Java Web 工程目录结构IDE 的目录结构截图本地的工作空间&#xff08;Workspace&#xff09;中的目录结构目录说明Eclipse 的 Java 工程目录结构IDE 的目录结构截图本地的工作空间中的工程目录MyEclipse 的 Java Web 工程目录结构IDE 目录结构截图本地的工作…

一天发多少短信会封号_枸杞一天吃多少?吃多了会怎样?黑枸杞红枸杞哪个好?...

●枸杞一天吃多少&#xff1f;其实枸杞作为一种滋补品&#xff0c;不适合过多的使用&#xff0c;因为那样反而会造成反作用和不良影响&#xff0c;健康的成年人每天吃20克左右就合适了&#xff0c;这样对一些疾病的治疗&#xff0c;才可以发挥更好的效果。如果是用枸杞子泡水喝…

IntelliJ IDEA for Mac 如何将普通 Java 项目变为 Web 项目

点击菜单栏 File --> Project Structure 在弹出的窗口中点击选择左侧的 Facets&#xff0c;接着点击右边的 &#xff0c;弹出的菜单中选择 web 在弹出的 『Choose Module』窗口中选择要转为 web 的项目&#xff08;模块&#xff09;&#xff0c;然后点击 OK 选择好模块后…

MacBook 如何强制删除『无法正常卸载』的应用程序

文章目录第一步&#xff1a;点击电脑屏幕左上角的 图标&#xff0c;再点击「关于本机」第二步&#xff1a;点击「储存空间」选项卡&#xff0c;接着点击「管理」第三步&#xff1a;选择左侧边栏的「应用程序」&#xff0c;然后在右侧的程序列表中选择要“删除”的程序&#x…

slot多作用域 vue_vue 深度长文之slot 篇

今天我们将分析我们经常使用的 vue 功能 slot 是如何设计和实现的&#xff0c;本文将围绕 普通插槽 和 作用域插槽 以及 vue 2.6.x 版本的 v-slot 展开对该话题的讨论。当然还不懂用法的同学建议官网先看看相关 API 先。接下来&#xff0c;我们直接进入正文吧普通插槽首先我们看…

android 扫描照片功能,Android自定义View- 雷达扫描图

首先来看看效果图&#xff1a;CSDN博客地址这里写图片描述这里我使用了两种实现方式&#xff1a;继承 view 实现。继承 surfaceview 实现。为什么会有两种实现方式呢&#xff1f;主要是因为我在继续加入一些自定义功能的时候&#xff0c;如果是继承 view &#xff0c;出现了卡顿…

SmartSVN for Mac 使用说明

文章目录连接 SVN 服务器签出&#xff08;Check Out&#xff09;导出&#xff08;Export&#xff09;打开工作副本&#xff08;Open Working Copy&#xff09;打开和管理项目移除工作副本&#xff08;Remove Working Copy&#xff09;项目及工作副本目录导航窗口查看和配置被忽…

bldc 原理 方波控制_【百问百答】ST 电机控制实战问答合辑 | 连载之一

点击下方链接可以直接观看电机直播及直播答疑电堂​wx18257eb0e8c82435.h5.xiaoe-tech.com电堂​wx18257eb0e8c82435.h5.xiaoe-tech.com本次实战问答只讨论同步电机&#xff0c;不对步进电机做特别的讨论&#xff0c;希望有助于大家进行电机开发或者是电机应用。Q1&#xff1a;…

android动画编辑软件,ALM视频动画编辑

ALM视频动画编辑app手机端中最为专业,强大的视频编辑工具,丰富的功能堪比pc级别,并且实用流畅不卡顿,操作简单明了,上手容易,视频效果出色,更多丰富素材内容使用&#xff01;下载ALM视频动画编辑app开始体验吧&#xff01;ALM视频动画编辑介绍ALM视频动画编辑神器为你提供非常高…

openhub_介绍OpenHub框架

openhub本文介绍OpenHub框架 -基于Apache Camel的新的开源集成解决方案。 本文回答了一些问题&#xff0c;为什么您应该关心另一个集成框架&#xff0c;强弱属性以及如何使用OpenHub启动新项目。 OpenHub框架是Apache Camel&#xff0c;但经过改进…… 当然&#xff0c;您只能…

spring 导出csv_Spring批处理CSV处理

spring 导出csv总览 我们将讨论的主题包括使用Spring Batch进行批处理的基本概念&#xff0c;以及如何将数据从CSV导入数据库。 0 – Spring Batch CSV处理示例应用程序 我们正在构建一个应用程序&#xff0c;演示用于处理CSV文件的Spring Batch的基础。 我们的演示应用程序将…

python强制结束函数_为什么Python没有 main 函数?终于有人给出了正确答案!

毫无疑问&#xff0c;Python中没有所谓的 main 入口函数&#xff0c;但在网上经常有文章提到“Python中的main函数”和“建议编写main函数”等。他们的目的可能是模仿真实的 main 函数&#xff0c;但是经常有很多人被误导&#xff08;或误解&#xff09;并编写非常繁琐的代码。…

MacOS 如何显示/隐藏文件

文章目录显示/隐藏文件快捷键修改“访达”属性修改文件隐藏属性设置特殊文件名实现隐藏使用命令设置文件隐藏属性显示/隐藏文件 快捷键 按下 Shift Command . 可以显示隐藏型的文件&#xff0c;再按下 Shift Command . 则不显示隐藏型的文件 修改“访达”属性 defaults…

不相关子查询的工作方式是_课题组工作|Nucleic Acids Research|基于表达密度谱的特征子空间分离及相关单细胞转录组分群新算法...

大家好&#xff01;为大家分享本课题组近期发表在Nucleic Acids Research的文章&#xff0c;题目为 “Entropy subspace separation-based clustering for noise reduction (ENCORE) of scRNA-seq data”&#xff0c;文章提出了一种基于表达密度谱的特征选择方法&#xff0c;能…

java 9 module_Java 9:欢迎来到Module World

java 9 moduleJava 9已于9月21日正式发布&#xff0c;Eclipse从Eclipse Oxygen.1a&#xff08;4.7.1a&#xff09;支持Java 9&#xff0c;让我们进入模块世界。 从此处下载Java 9&#xff0c;并将其添加到Eclipse Installed JRE中&#xff0c;如下所示 就是这样&#xff0c;…

Mac OS 通过配置窗口来连接远程主机

点击连接后&#xff0c;就跳到命令终端窗口中&#xff0c;输入远程主机 root 用户的登录密码&#xff0c;则完成连接。

温度补偿计算公式_一种工业用温度测量模块的设计与实现

一种工业用温度测量模块的设计与实现罗伯特侯0 引言温度是工业生产中最重要的参数之一&#xff0c;因此温度测量设备在工业领域不可或缺。热电偶是工业场合中应用最广泛的温度传感器,它的主要特点是测温范围宽,价格低&#xff0c;同时结构简单,坚固耐用。笔者采用高集成度、高精…

微博如何发订阅消息_微信订阅号或将大变天,微博8年前就这么干了...

近日&#xff0c;微信又偷偷的做了一个大胆的尝试&#xff0c;将公众号消息排序改版&#xff0c;不再按照一直以来的“时间轴展示”&#xff0c;而是学起了微博&#xff0c;变成了“智能排序”。微信的“阅读效率优化”排序不过可能是为了独树一帜&#xff0c;微信管这种排序方…