当前位置: 首页 > news >正文

Day26 HashMap

Day26 HashMap

文章目录

  • Day26 HashMap
    • 一、应用场景
    • 二、特点
    • 三、基本用法
    • 四、面试题

一、应用场景

1、概念: HashMap是Java集合框架中的一种实现类,用于存储键值对。

2、好处: HashMap是一个常用的集合类,适用于需要快速查找和插入键值对的场景。通过合理使用HashMap,可以高效地管理和操作键值对数据 。

二、特点

1、HashMap基于哈希表实现,提供了快速的查找和插入操作。

2、允许使用null作为键和值。

3、不保证元素的顺序,即不保证遍历顺序与插入顺序相同。

4、允许键和值都可以重复(键重复会覆盖旧值)。

理解:无序 + key去重

注意:1.HashMap的key不允许重复,Key是唯一的
2.HashMap的value允许重复

代码理解:

	public static void main(String[] args) {//Key是唯一的,(小杨)去重HashMap<String, Integer> map = new HashMap<>();		map.put("小张", 27);map.put("小宽", 23);map.put("小白", 23);map.put("小杨", 28);map.put("小杨", 29);map.put("小杨", 30);Set<Entry<String,Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {System.out.println(entry);}}

三、基本用法

  1. 导入HashMap类

    import java.util.HashMap;
    
  2. 创建HashMap对象

    HashMap<String, Integer> map = new HashMap<>();
    
  3. 添加键值对

    map.put("apple", 10);
    map.put("banana", 5);
    map.put("orange", 8);
    
  4. 获取值

    int quantity = map.get("apple"); // 返回键"apple"对应的值
    
  5. 遍历HashMap

    for (String key : map.keySet()) {int value = map.get(key);System.out.println(key + ": " + value);
    }
    
  6. 检查键是否存在

    boolean containsKey = map.containsKey("apple"); // 检查是否包含键"apple"
    
  7. 删除键值对

    map.remove("banana"); // 删除键"banana"对应的键值对
    
  8. 获取HashMap大小

    int size = map.size(); // 返回HashMap中键值对的数量
    

代码理解:

public class Test01 {/*** 知识点:HashMap的使用*/public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();//添加元素map.put("小希", 27);map.put("小空", 23);map.put("小丽", 28);map.put("小光", 36);map.put("小田", 32);map.put("小阳", 28);map.put("小波", 28);//将newMap中所有的元素添加到map集合中HashMap<String, Integer> newMap = new HashMap<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ddd", 40);map.putAll(newMap);//如果key存在就获取value值,如果不存在就添加Integer putIfAbsent = map.putIfAbsent("小希111", 28);System.out.println("putIfAbsent:" + putIfAbsent);//通过Key获取到对应的ValueInteger integer1 = map.get("小丽");System.out.println("通过Key获取对应的value:" + integer1);//28//通过Key获取对应的value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("小希111", 888);System.out.println("通过Key获取对应的value:" + integer2);//888//清空集合中的元素//map.clear();System.out.println("判断集合中是否有指定的key:" + map.containsKey("小希"));//trueSystem.out.println("判断集合中是否有指定的value:" + map.containsValue(27));//trueSystem.out.println("判断集合中是否没有元素:" + map.isEmpty());//false//通过key删除映射关系(key+value)map.remove("aaa");//通过key+value删除映射关系(key+value)map.remove("bbb", 20);//通过key替换valuemap.replace("小希", 30);//通过key+value替换valuemap.replace("小空", 23, 25);//获取映射关系的个数(映射关系内包含了key和value)int size = map.size();System.out.println("获取映射关系的个数:" + size);//10//获取map中所有的valueCollection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));//将集合转换为数组,再将数组转换为字符串System.out.println("-----------------------");//遍历 -- keySet()//思路:获取map集合中所有的key放在一个Set集合中,遍历Set集合获取出key,再通过key获取到Map集合中对应的valueSet<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------------");//遍历 -- entrySet()//思路:获取map集合中所有的映射关系对象放在一个Set集合中,遍历Set集合获取出映射关系对象(Key+Value)Set<Entry<String,Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

四、面试题

需求:针对于HashMap的value排序

public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();		map.put("小希", 27);map.put("小空", 23);map.put("小丽", 28);map.put("小光", 36);map.put("小田", 32);map.put("小阳", 28);map.put("小波", 28);//将map的映射关系对象取出,返回Set集合Set<Entry<String,Integer>> entrySet = map.entrySet();//将Set集合转换为ArrayList集合ArrayList<Entry<String,Integer>> list = new ArrayList<>(entrySet);//利用ArrayList的sort方法去排序list.sort(new Comparator<Entry<String,Integer>>() {@Overridepublic int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {Integer v1 = o1.getValue();Integer v2 = o2.getValue();return Integer.compare(v1, v2);}});//遍历ArrayListfor (Entry<String, Integer> entry : list) {System.out.println(entry);}}

相关文章:

Day26 HashMap

Day26 HashMap 文章目录 Day26 HashMap一、应用场景二、特点三、基本用法四、面试题 一、应用场景 1、概念&#xff1a; HashMap是Java集合框架中的一种实现类&#xff0c;用于存储键值对。 2、好处&#xff1a; HashMap是一个常用的集合类&#xff0c;适用于需要快速查找和插…...

某蓝队面试经验

背景 据小道消息说今年的国护疑似提前到了五月份&#xff0c;所以最近也是HW面试的一个高峰期啊&#xff0c;这里分享一下上次长亭的蓝队面试问题&#xff08;附本人的回答&#xff0c;仅供参考&#xff09; 面试问答 1、谈谈作为蓝队护网过程使用过厂商的设备 这里我回答的…...

【Linux】 centos7安装卸载SQL server(2017、2019)

一、安装配置 准备一个基础Linux配置&#xff1a; 内存为20GB 运行内存为2GB的系统&#xff08;数据库小于2GB安装不了&#xff09; 1、网络配置 我们需要进行网络的连接 进入 cd /ect/sysconfig/network-script/ 编辑文件ifcfg-ens33 vi ifcfg-ens33 Insert键进行编辑 把ONBOO…...

面试算法-110-课程表

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 …...

注册前后端php的检测

首先&#xff0c;在HTML表单中添加一个用于输入密码的文本框&#xff0c;并在其后面添加一个用于显示密码格式要求提示的元素&#xff0c;例如一个 <span> 标签。 <input type"password" id"passwordInput"> <span id"passwordHint…...

Redis:什么是redis?①

一、思想 Redis是一个开源的高性能基于内存key-value数据库&#xff0c;常用作数据库、缓存或消息代理 二、数据类型 String List...

【课程】MyBatisPlus视频教程

MyBatis-Plus是一款非常强大的MyBatis增强工具包,只做增强不做改变. 在不用编写任何SQL语句的情况下即可以极其方便的实现单一、批量、分页等操作。 本套教程基于MyBatis-Plus新2.3版本,详细讲授&#xff1a;集成Mybatis-Plus、 通用CRUD、EntityWrapper条件构造器、ActiveRec…...

如何使用人工智能和ChatGPT来优化营销转化率

人工智能 &#xff08;AI&#xff09; 和营销的交集正在彻底改变企业与客户互动的方式&#xff0c;最终改变营销转化率。人工智能能够分析大量数据、理解模式和自动执行任务&#xff0c;它不仅是一项创新技术&#xff0c;而且是营销领域的根本性转变。这种转变允许更加个性化、…...

Ubuntu 22.04上构建libvirt源码错误解决

当在Ubuntu 22.04上构建libvirt源码时&#xff0c;可能会遇到一些错误。下面是一些常见错误及其解决方法&#xff1a; 1. 错误&#xff1a;Program xmllint’未找到或不可执行 解决方法&#xff1a;安装libxml2-utils sudo apt-get install libxml2-utils2. 错误&#xff1a…...

游戏客户端面经

1&#xff0c;3D的模型怎么显示到2DUI上面 2&#xff0c;C#的ArryList和List的区别 3&#xff0c;接口和抽象类的区别&#xff0c;一般什么时候用接口 4&#xff0c;UGUI怎么渲染的UI&#xff0c;UGUI的层级管理&#xff08;怎么不打断合批&#xff09;&#xff0c;合批流程…...

AS,idea,maven,gradle

Jdk,sdk。提前都是需要下好的。 Maven与gradle的思考&#xff1a; 用AS开发app时&#xff0c;gradle本就有&#xff0c;自己也可以指定&#xff0c;AGP同样。要注意gradle&#xff0c;AGP,jdk版本的事情。还有依赖库。 用idea开发网络程序时&#xff0c;也有内置的maven&…...

ElasTool v3.0 程序:材料弹性和机械性能的高效计算和可视化工具包

分享一个材料弹性和机械性能的高效计算和可视化工具包&#xff1a; ElasTool v3.0。 感谢论文的原作者&#xff01; 主要内容 “弹性和机械性能的高效计算和可视化对于材料的选择和新材料的设计至关重要。该工具包标志着材料弹性和机械性能计算分析和可视化方面的重大进步…...

Redis入门级详解(一)

一、Redis入门介绍 1、什么是Redis? Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。…...

java算法题每日多道六

138. 随机链表的复制 题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对…...

C# 特性(Attribute)

C# 特性&#xff08;Attribute&#xff09; 文章目录 C# 特性&#xff08;Attribute&#xff09;Obsolete语法示例代码 创建自定义特性&#xff08;Attribute&#xff09; Obsolete 这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例…...

Redis 教程系列之Redis 配置(三)

Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。 你可以通过 CONFIG 命令查看或设置配置项。 语法 Redis CONFIG 命令格式如下: redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME 实例 redis 127.0…...

Java实验03

Code1 package q3;public class Method01{public static void main(String[] args) {class Student{String name;String StuID;public Student(String name,String StuID){this.namename;this.StuIDStuID;}public void speak(String name, String stuID) {//输出学号与姓名Sys…...

安卓studio连接手机之后,一两秒之后就自动断开了。问题解决。

太坑了&#xff0c;安卓studio链接手机之后。几秒之后就断开了。我以为是adb的问题&#xff0c;就重新安装了一下adb。并且在环境变量中配置了Path的路径。然而并没有什么用啊。 经过排查原来是数据心虚了。线的接触不良。导致你刚接通的瞬间有相对较强的电流是因为有瞬间高电压…...

数字科技优化金融供给,内外协同激活新质生产力

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 新一轮产业变革悄然发生&#xff0c;决定产业高度和竞争格局的底层生产力&#xff0c;也正在经历一场从量变到质变的跃迁。新质生产力则是这场跃迁后的最新呈现。 站在新质生产力爆发的时代拐点&#xff0c;金融业达成…...

「Linux系列」Shell 输入/输出重定向

文章目录 一、Shell 输入重定向二、Shell 输出重定向标准输出重定向&#xff1a;标准错误输出重定向&#xff1a;同时重定向标准输出和错误输出&#xff1a;禁用输出&#xff1a; 三、Shell 重定向命令输出重定向&#xff1a;错误输出重定向&#xff1a;标准输出和错误输出同时…...

InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制

InVideo插件深度解析&#xff1a;如何在Unreal Engine中实现高效视频流播放与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一个基于Unreal Engine 5开发的RTSP视频播放插件&#xff0…...

树莓派工业GPIO接口板:电气隔离与电平转换实战指南

1. 项目概述&#xff1a;为什么需要一块工业级GPIO接口板&#xff1f;如果你用树莓派做过一些硬件项目&#xff0c;尤其是涉及到控制继电器、电机或者连接工业设备&#xff08;比如PLC、变频器&#xff09;时&#xff0c;大概率踩过这样的坑&#xff1a;直接用树莓派的GPIO引脚…...

基于树莓派打造万能遥控器:从硬件选型到Web控制界面全解析

1. 项目概述&#xff1a;打造一个能“学习”的万能遥控器家里遥控器越来越多&#xff0c;电视、空调、风扇、灯带……每个设备都配一个&#xff0c;找起来麻烦&#xff0c;用起来也乱。市面上所谓的“万能遥控器”其实并不万能&#xff0c;它内置的码库有限&#xff0c;很多小众…...

NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台

NBTExplorer&#xff1a;让Minecraft数据编辑从专业工具变成人人可用的可视化平台 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经面对Minecraft世界文件…...

AhMyth位置跟踪:GPS定位与地理围栏技术深度解析

AhMyth位置跟踪&#xff1a;GPS定位与地理围栏技术深度解析 【免费下载链接】AhMyth Cross-Platform Android Remote Administration Tool | The only maintained version of AhMyth on github | A revival of the original repository at https://GitHub.com/AhMyth/AhMyth-An…...

2026数据治理平台选型:五款产品如何赋能数据中台建设?

一、引言&#xff1a;数据中台的成败&#xff0c;关键在治理在数字化浪潮的席卷下&#xff0c;“数据中台”已成为当代企业信息化架构中的核心战略组件。然而&#xff0c;一个悖论正困扰着大量企业&#xff1a;数据中台的基础设施搭建日趋完善&#xff0c;但真正将数据转化为业…...

基于PIC32单片机实现Android USB音频转SPDIF输出的DIY方案

1. 项目概述&#xff1a;为Android设备打造一个高保真SPDIF音频接口作为一名长期折腾嵌入式音频和家庭影院的玩家&#xff0c;我经常遇到一个痛点&#xff1a;手头那些性能不错的Android手机或平板&#xff0c;其内置的3.5mm耳机孔或者USB-C口的音频输出质量&#xff0c;在连接…...

基于MAX78000的边缘AI语音识别:从模型训练到嵌入式部署实战

1. 项目概述与核心思路最近在捣鼓一个挺有意思的小项目&#xff0c;我把它叫做“声控转向控制器”。简单来说&#xff0c;这玩意儿能听懂你说的几个特定单词&#xff0c;比如“左转”、“右转”、“前进”、“后退”&#xff0c;然后控制对应的LED灯亮起。你可能会想&#xff0…...

为什么你明明很努力,领导却总看不到?问题出在这

许多测试同行在深夜加班排查Bug时&#xff0c;在凌晨赶写自动化脚本时&#xff0c;在对着海量数据做性能分析时&#xff0c;内心都会浮现一个共同的困惑&#xff1a;我明明已经这么拼了&#xff0c;为什么在领导眼里&#xff0c;我依然是个“找茬的”&#xff0c;而不是“创造价…...

10分钟掌握D3KeyHelper:告别手酸,暗黑3游戏效率翻倍的终极指南

10分钟掌握D3KeyHelper&#xff1a;告别手酸&#xff0c;暗黑3游戏效率翻倍的终极指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否曾在《暗…...