网站首页 > 知识剖析 正文
哈喽 大家好!
我是老陈,这节课一起学习HashMap,HashMap就像 “带索引的电子词典”—— 每个词条(键值对)通过唯一索引(键)快速查找,是 Java 中最常用的键值存储结构!
35.1 HashMap 的核心特性:哈希存储与键值对映射
HashMap 是 “会自动归类的电子抽屉”,每个抽屉(键)对应唯一物品(值),放入和取出时通过抽屉标签快速定位。它内部基于哈希表实现,通过键的哈希值计算存储位置,就算数据量很大,也能在极短且稳定的时间内完成读写操作。
put (K key, V value):向 HashMap 中添加键值对。键必须是唯一的,而值可以重复。
get(Object key):通过键来获取对应的值。如果键不存在,则返回 null。
remove(Object key):移除指定键的映射,并返回被删除的值。如果键不存在,则返回 null。
package com.map.demo;
import java.util.Map;
import java.util.HashMap;
/**
* @author 今日头条:老陈说编程
* HashMap的基本特性及键值操作演示
* 本类展示了HashMap的核心特性,包括:
* 1. 允许null键和null值
* 2. 键唯一性与值覆盖
* 3. 无序性(不保证插入顺序)
* 4. 基本的增删查操作
*/
public class HashMapBasicFeatures {
public static void main(String[] args) {
// 1. 创建HashMap实例
// 使用默认初始容量16和负载因子0.75
// 当元素数量超过容量*负载因子时会自动扩容
Map<String, String> dictionary = new HashMap<>();
// 2. 添加键值对
// 键必须唯一,值可以重复
// 内部通过键的hashCode()和equals()保证唯一性
dictionary.put("java", "面向对象编程语言");
dictionary.put("algorithm", "数据处理逻辑");
// HashMap允许一个键为null,且可以存储在任何位置
// null键的hashCode被特殊处理为0
dictionary.put(null, null);
// 输出结果不保证顺序,依赖内部哈希表实现
System.out.println("初始集合:" + dictionary);
// 3. 重复键覆盖机制
// 对已存在的键调用put()会替换原值
// 返回值为被替换的旧值(此处为"面向对象编程语言")
dictionary.put("java", "Java 21新特性");
System.out.println("覆盖后:" + dictionary);
// 4. 查找操作
// 通过键获取值
// 若键不存在返回null
System.out.println("查找java:" + dictionary.get("java"));
// 5. 删除操作
// 移除指定键的映射,返回被删除的值
// 若键不存在返回null
dictionary.remove("algorithm");
System.out.println("删除后:" + dictionary);
}
}
35.2 核心操作:HashMap 的增删改查
操作 HashMap 就像 “管理带标签的抽屉”—— 用 put 放物品,get 按标签取,remove 撕标签,清晰高效!
put (K key, V value) 方法用于向 HashMap 中添加键值对。如果键已存在,会覆盖原有值并返回旧值;如果键不存在,则返回 null。
containsKey (Object key) 方法用于检查 HashMap 中是否存在指定的键。
get(Object key) 方法用于获取指定键对应的值。如果键存在,返回对应的值;如果键不存在,返回 null。
package com.map.demo;
import java.util.Map;
import java.util.HashMap;
/**
* @author 今日头条:老陈说编程
* HashMap的增删改查及遍历方式演示
* 本类展示了HashMap的基本操作,包括创建、添加元素、更新元素、查询元素以及三种不同的遍历方式
*/
public class HashMapOperations {
public static void main(String[] args) {
// 1. 创建HashMap存储学生成绩
// 使用String类型作为键(学生姓名),Integer类型作为值(成绩)
Map<String, Integer> scores = new HashMap<>();
// 添加元素到HashMap中
// 使用put方法添加键值对,如果键已存在则覆盖原有值
scores.put("张三", 90);
scores.put("李四", 85);
scores.put("王五", 95);
// 2. 操作演示
// 检查HashMap中是否存在指定的键
System.out.println("是否存在张三:" + scores.containsKey("张三")); // 输出:true
// 根据键获取对应的值
System.out.println("王五的成绩:" + scores.get("王五")); // 输出:95
// 更新已有键对应的值
scores.put("李四", 90); // 将李四的成绩从85更新为90
System.out.println("更新后李四的成绩:" + scores.get("李四"));
// 3. 遍历键值对(三种方式)
// 方式1:使用entrySet()遍历
// entrySet()返回一个包含Map.Entry对象的Set集合
// 每个Map.Entry对象包含一个键值对,通过getKey()和getValue()方法获取
System.out.println("\n遍历方式1:entrySet()");
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// 方式2:使用keySet() + get()遍历
// keySet()返回所有键的Set集合,通过遍历键集合再获取对应的值
// 这种方式效率稍低,因为每次get()操作需要进行哈希查找
System.out.println("\n遍历方式2:keySet() + get()");
for (String name : scores.keySet()) {
System.out.println(name + ":" + scores.get(name));
}
// 方式3:使用values()遍历
// values()返回所有值的Collection集合,只能获取值,无法获取键
System.out.println("\n遍历方式3:values()");
for (Integer score : scores.values()) {
System.out.println("成绩:" + score);
}
}
}
总结HashMap 的适用场景
快速键值查找:如字典、配置表、缓存等,需要通过键快速获取值的场景。
无顺序要求的数据存储:当不需要按插入顺序或排序遍历,只关注键值映射时。
单线程环境下的高性能需求:相比其他 Map 实现,HashMap 在单线程下读写效率最高。
下期将讲解 TreeMap,记得点赞关注,评论区留下你对 HashMap 的疑问,我们一起解决!
猜你喜欢
- 2025-07-24 c++ String类型介绍(c++string数据类型)
- 2025-07-24 QQ登录界面看腻了?修改1个文件让它瞬间高大上!
- 2025-07-24 go-zero源码浅析4:海量数据处理的利器Bloom Filter布隆过滤器
- 2025-07-24 《辐射4》完整对话显示MOD下载放出!这下圆满了
- 2025-07-24 抖音视频去水印(抖音视频去水印保存)
- 2025-07-24 Go基础语法极速版(一)——从main函数到string类型
- 2025-07-24 一篇文章搞定Java字符串的基本操作知识
- 2025-07-24 【工作分享】PDA如何去掉条码中的数据结束符
- 2025-07-24 String、String StringBuffer 和 StringBuilder 的区别是什么?
- 2025-07-24 Java Map 所有的值转为String类型
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)