Java HashMap

news2025/7/9 6:37:09

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

HashMap 是无序的,即不会记录插入的顺序。

HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

在这里插入图片描述

HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。

在这里插入图片描述

HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

基本类型对应的包装类表如下:

基本类型引用类型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

HashMap 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.HashMap; // 引入 HashMap 类

以下实例我们创建一个 HashMap 对象 Sites, 整型(Integer)的 key 和字符串(String)类型的 value:

HashMap<Integer, String> Sites = new HashMap<Integer, String>();

添加元素

HashMap 类提供了很多有用的方法,添加键值对(key-value)可以使用 put() 方法:

实例

// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Yxt");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites);
    }
}

执行以上代码,输出结果如下:

{1=Google, 2=Yxt, 3=Taobao, 4=Zhihu}

以下实例创建一个字符串(String)类型的 key 和字符串(String)类型的 value:

实例

// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<String, String> Sites = new HashMap<String, String>();
        // 添加键值对
        Sites.put("one", "Google");
        Sites.put("two", "Yxt");
        Sites.put("three", "Taobao");
        Sites.put("four", "Zhihu");
        System.out.println(Sites);
    }
}

执行以上代码,输出结果如下:

{four=Zhihu, one=Google, two=Yxt, three=Taobao}

访问元素

我们可以使用 get(key) 方法来获取 key 对应的 value:

实例

// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Yxt");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites.get(3));
    }
}

执行以上代码,输出结果如下:

Taobao

删除元素

我们可以使用 remove(key) 方法来删除 key 对应的键值对(key-value):

实例

// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Yxt");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.remove(4);
        System.out.println(Sites);
    }
}

执行以上代码,输出结果如下:

{1=Google, 2=Yxt, 3=Taobao}

删除所有键值对(key-value)可以使用 clear 方法:

实例

// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Yxt");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.clear();
        System.out.println(Sites);
    }
}

执行以上代码,输出结果如下:

{}

计算大小

如果要计算 HashMap 中的元素数量可以使用 size() 方法:

实例
// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Yxt");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites.size());
    }
}

执行以上代码,输出结果如下:

4

迭代 HashMap

可以使用 for-each 来迭代 HashMap 中的元素。

如果你只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value,如果你只想获取 value,可以使用 values() 方法。

实例

// 引入 HashMap 类      
import java.util.HashMap;

public class YxtTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Yxt");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        // 输出 key 和 value
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // 返回所有 value 值
        for(String value: Sites.values()) {
          // 输出每一个value
          System.out.print(value + ", ");
        }
    }
}

执行以上代码,输出结果如下:

key: 1 value: Google
key: 2 value: Yxt
key: 3 value: Taobao
key: 4 value: Zhihu
Google, Yxt, Taobao, Zhihu,

Java HashMap 方法

hashmap
Java HashMap 常用方法列表如下:

方法描述
clear()删除 hashMap 中的所有键/值对
clone()复制一份 hashMap
isEmpty()判断 hashMap 是否为空
size()计算 hashMap 中键/值对的数量
put()将键/值对添加到 hashMap 中
putAll()将所有键/值对添加到 hashMap 中
putIfAbsent()如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。
remove()删除 hashMap 中指定键 key 的映射关系
containsKey()检查 hashMap 中是否存在指定的 key 对应的映射关系。
containsValue()检查 hashMap 中是否存在指定的 value 对应的映射关系。
replace()替换 hashMap 中是指定的 key 对应的 value。
replaceAll()将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。
get()获取指定 key 对应对 value
getOrDefault()获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
forEach()对 hashMap 中的每个映射执行指定的操作。
entrySet()返回 hashMap 中所有映射项的集合集合视图。
keySet()返回 hashMap 中所有 key 组成的集合视图。
values()返回 hashMap 中存在的所有 value 值。
merge()添加键值对到 hashMap 中
compute()对 hashMap 中指定 key 的值进行重新计算
computeIfAbsent()对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中
computeIfPresent()对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。

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

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

相关文章

2023年天津理工大学中环信息学院专业课考试具体安排

天津理工大学中环信息学院2023年高职升本科专业课考试时间地点及防疫须知 一、考试时间地点 考试时间&#xff1a;2022年12月29日上午。 具体考试时间以准考证上显示的为准。 考生可提前半小时入场&#xff0c;考试开始&#xff08;铃声&#xff09;后&#xff0c;禁止入场&…

【python绘制地图——folium实用功能进阶】

Python使用folium制作地图并生成png图片 第一章 folium的方法和类的介绍&#xff08;思维导图&#xff09; 第二章 使用folium制作地图 第三章 folium实用功能进阶 第三章 使用Html2Image生成png图片 第四章 使用reportlab制作pdf报告 文章目录Python使用folium制作地图并生成…

基于C++实现对UNet图像分割的部署

本博文利用UNet介绍图像分割的部署,重点介绍采用warpaffine对图像进行预处理,以及后处理decode部分的代码。 1. Unet网络介绍 UNet它是一个encoder - decoder的结构,那么encoder对应就是这个u型网络左边这半部分,也就是我们特征提取及下采样这部分。decoder解码就是右边部…

华为机试_HJ41 称砝码【中等】【menset】【多重背包】【动态规划】【收藏】

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 解题过程 提交代码 学习代码 代码一 动态规划 代码二 代码三 收藏点 1. menset函数 2. 动态规划-多重背包问题 描述 现有n种砝码&#xff0c;重量互不相等&#xff0c;分别为 m1,m2,m3…mn &#xff1b; 每种…

【程序人生】我填写《2022年国内软件质量调查问卷》的感想

1、前言 说一下为啥会参加这个问卷&#xff0c;其实初衷是本着自身感受&#xff0c;和希望能学习到更好的软件质量方案去填写的。所以&#xff0c;最后也是建议本次问卷的内容&#xff0c;能够提供更多切实可行的提高软件质量的实践方案。 2、参与问卷后的所思所想 2.1 经历过…

nginx 解决跨域问题——(CORS)

跨域前世今生 跨域是一种安全机制。 在开发阶段与上线前就必须提前考虑到的安全问题并且采取合适的手段去避免这个问题带来的程序错误。 ![aHR0cDovL2ZpbGUubWljcm9hbnN3ZXIuY24vYmxvZ181M18xLnBuZw.png](https://img-blog.csdnimg.cn/img_convert/1803660cf39d7222197f9bd7ae…

电磁场的变化方式 工程电磁场 P27

小小纪念一下 我们要注意 我们不研究瞬态过程&#xff0c;只关心稳态过程 瞬态过程的长短取决于电路的结构还有伏安特性&#xff0c;只要我们的激励是周期的&#xff0c;如果是一个周期性的信号&#xff0c;可以分解成一系列的正弦分量&#xff0c;对于我们的电磁场也一样 如…

嵌入式学习之Linux驱动:IO模型(1)概览

文章目录什么是IO呢&#xff1f;IO执行过程IO模型引入IO模型的种类阻塞IO非阻塞IOIO多路复用信号驱动IO异步IO什么是IO呢&#xff1f; IO的英文全称是input和output&#xff0c;翻译过来就是输入和输出。 在冯诺依曼结构中&#xff0c;将计算机分成为5个部分&#xff1a;运算器…

太阳能电池板自动清洗机器人的制作分享

本文素材来源于宁夏大学 作者&#xff1a;李伟荣、李学辉、金茹芳、沙小平 指导老师&#xff1a;康彩、张冬 一、执行总结 1.1项目概述 在“十三五”发展的大形势下&#xff0c;由于现在国家大力发展清洁能源&#xff0c;而太阳能发电受到了很大重视&#xff0c;但是目前并没…

Cartesian product

In mathematics, specifically set theory, the Cartesian product of two sets A and B, denoted A  B, is the set of all ordered pairs (a, b) where a is in A and b is in B.[1] In terms of set-builder notation, that is {\displaystyle A\times B{(a,b)\mid a\in …

线性模型-优化方法及推导过程

本文包含大量不严谨的公式写法&#xff0c;只是推式子时候打草记录一下… 线性模型(Linear Model)是机器学习中应用最广泛的模型&#xff0c;指通过样本特征的线性组合来进行预测的模型。给定一个DDD维的样本特征的线性组合来进行预测的模型&#xff0c;给定一个DDD维样本x[x1,…

接口自动化测试(Python+Requests+Unittest)

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点&#xff1a; 优点&#xff1a; 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高&#xff1f; 因为前端页面变化太快&#xff0c;而且UI自动化比较耗时&#xff08;比如等待页面元素的…

回眸 2022,展望 2023

回眸 2022&#xff0c;展望 2023 回眸 2022 先进行回眸吧&#xff01;2022 感觉过得太快了&#xff0c;就好像昨天刚刚过年一样&#xff01;但是时间不会欺骗任何人&#xff0c;过了多久就是多久&#xff01;它不会管你是因为什么而耽误&#xff0c;也不会管你是因为什么而荒…

浏览器跨域-原因及解决方案

1.浏览器跨域 如何判断一个浏览器的请求是否跨域&#xff1f; 在A地址&#xff08;发起请求的页面地址&#xff09;向B地址&#xff08;要请求的目标页面地址&#xff09;发起请求时&#xff0c; 如果A地址和B地址在&#xff1a; 协议 域名 端口 不全相同&#xff0c;则说明请…

太神了!开源大佬的SpringBoot+微服务架构笔记,一般人真肝不出来

时间飞逝&#xff0c;转眼间毕业七年多&#xff0c;从事 Java 开发也六年了。我在想&#xff0c;也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

Category (mathematics)

In mathematics, a category (sometimes called an abstract category to distinguish it from a concrete category) is a collection of “objects” that are linked by “arrows”. A category has two basic properties: the ability to compose the arrows associatively…

51单片机实训day2——创建Proteus工程以及Proteus基本控件的使用|单片机最小系统电路设计:电源配置 复位电路 晶振电路

以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01; 内 容&#xff1a;Proteus工程创建 学 时&#xff1a;2学时 知识点&#xff1a;熟悉Proteu…

AbstractProcessor相关的API记录

java文件操作相关的两个类&#xff1a; JCTree 树节点、TreeMaker 树节点构建器。 JCTree JCTree的一个子类就是java语法中的一个节点&#xff0c;类、方法、字段等这些都被封装成了一个JCTree子类。 JCTree详细的介绍&#xff1a;抽象语法树AST的全面解析&#xff08;二&…

【数据驱动测试】从方法探研到最佳实践

导读 在自动化测试实践中&#xff0c;测试数据是制造测试场景的必要条件&#xff0c;本文主要讲述了在沟通自动化框架如何分层&#xff0c;数据如何存储&#xff0c;以及基于单元测试pytest下如何执行。并通过实践案例分享&#xff0c;提供数据驱动测试的具体落地方案。 基本…

训练yolo系列+deepsort模式的跟踪器(一):训练deepsort

由于是检测+跟踪模式,因此检测器和跟踪器是分开训练的。本节中我们先手把手的训练deepsort跟踪器。在此要感谢mikel大佬所提供的源码,由于代码更新的比较频繁,各种版本错误和运行错误在本节中会重点说明。mikel-brostrom/Yolov5_StrongSORT_OSNet: Mult-object tracking and…