news 2026/6/10 17:10:24

玩转Java Map集合,从基础到实战的全面解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
玩转Java Map集合,从基础到实战的全面解析

在Java集合框架中,Map是与Collection并列的核心接口,它以**键值对(Key-Value)**的形式存储数据,是开发中处理映射关系的必备工具。不管是日常业务开发中的数据缓存、配置存储,还是复杂的业务逻辑映射,Map都能发挥关键作用。今天就带大家从基础到实战,彻底搞懂Map集合的使用!

一、Map集合的核心特性

1. 键的唯一性:Map中的Key是唯一的,不能重复,若插入相同Key的键值对,新的Value会覆盖旧值。

2. 值的可重复性:Value可以重复,多个Key可以对应同一个Value。

3. 无序/有序特性:不同实现类的有序性不同,如HashMap无序,LinkedHashMap按插入顺序排序,TreeMap按Key的自然顺序排序。

二、Map的常用实现类

实现类 特点 适用场景

HashMap 基于哈希表实现,线程不安全,查询效率高(O(1)),无序 单线程环境下的常规映射存储

Hashtable 基于哈希表实现,线程安全(方法加synchronized),效率低,无序 多线程环境(已被ConcurrentHashMap替代)

LinkedHashMap 继承HashMap,维护插入/访问顺序,查询效率接近HashMap 需要保留数据插入顺序的场景

TreeMap 基于红黑树实现,按Key自然排序/自定义排序,查询效率O(logn) 需要对Key进行排序的场景

ConcurrentHashMap 分段锁/CAS实现线程安全,并发性能优于Hashtable 高并发环境下的映射存储

三、Map集合的核心操作

以最常用的HashMap为例,演示基础CRUD操作:

java

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class MapDemo {

public static void main(String[] args) {

// 1. 创建Map集合

Map<String, Integer> studentScore = new HashMap<>();

// 2. 新增键值对

studentScore.put("张三", 90);

studentScore.put("李四", 85);

studentScore.put("王五", 95);

// 重复Key,Value会被覆盖

studentScore.put("张三", 92);

// 3. 获取值

int zhangSanScore = studentScore.get("张三");

System.out.println("张三的成绩:" + zhangSanScore); // 输出92

// 4. 遍历Map

// 方式1:遍历Key集

Set<String> keys = studentScore.keySet();

for (String key : keys) {

System.out.println(key + ":" + studentScore.get(key));

}

// 方式2:遍历Entry集(推荐,效率更高)

for (Map.Entry<String, Integer> entry : studentScore.entrySet()) {

System.out.println(entry.getKey() + ":" + entry.getValue());

}

// 5. 删除键值对

studentScore.remove("李四");

System.out.println("删除李四后:" + studentScore);

// 6. 判断是否包含Key/Value

boolean hasWangWu = studentScore.containsKey("王五");

boolean has85 = studentScore.containsValue(85);

System.out.println("是否包含王五:" + hasWangWu); // true

System.out.println("是否包含85分:" + has85); // false

}

}

四、Map的实战技巧

1. 避免空指针:使用 getOrDefault() 方法,当Key不存在时返回默认值,替代直接 get() 。

java

int score = studentScore.getOrDefault("赵六", 0); // 赵六不存在,返回0

2. JDK8+新特性:使用 putIfAbsent() 避免覆盖已有值, computeIfAbsent() 懒加载创建值。

java

// 仅当Key不存在时才插入

studentScore.putIfAbsent("赵六", 88);

// 若Key不存在,通过函数生成值并插入

studentScore.computeIfAbsent("钱七", k -> 78);

3. 排序Map:借助TreeMap或Stream对HashMap进行排序。

java

// 按Key升序排序

Map<String, Integer> sortedMap = new TreeMap<>(studentScore);

// 按Value降序排序(Stream方式)

studentScore.entrySet().stream()

.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())

.forEach(System.out::println);

五、注意事项

1. HashMap的Key要求:Key的类必须重写 hashCode() 和 equals() ,否则会导致重复Key或查询失效。

2. 线程安全问题:HashMap非线程安全,多线程环境下若同时进行增删改,需使用ConcurrentHashMap或手动加锁。

3. 性能考量:HashMap初始容量和负载因子需合理设置(默认初始容量16,负载因子0.75),避免频繁扩容。

Map集合是Java开发中高频使用的工具,掌握其不同实现类的特性和实战技巧,能大幅提升代码的效率和健壮性。你在使用Map时遇到过哪些问题?欢迎在评论区交流~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:08:58

PyTorch-CUDA-v2.6镜像中运行LangChain构建对话代理

PyTorch-CUDA-v2.6 镜像中运行 LangChain 构建对话代理 在当今 AI 应用快速迭代的背景下&#xff0c;一个常见的痛点浮出水面&#xff1a;开发者往往花了大量时间在环境配置上——CUDA 版本不兼容、PyTorch 编译失败、依赖冲突频发……而真正用于模型开发和功能实现的时间却被严…

作者头像 李华
网站建设 2026/6/10 13:07:07

CH340转USB-Serial Controller D常见识别问题解析

深入理解CH340&#xff1a;为何你的“USB-SERIAL CONTROLLER D”总是连不上&#xff1f; 在调试STM32、ESP8266这类开发板时&#xff0c;你是否曾无数次面对这样一个问题——插上USB转串口模块后&#xff0c;设备管理器里赫然显示着 “USB-SERIAL CONTROLLER D” &#xff0…

作者头像 李华
网站建设 2026/6/10 15:18:39

自动驾驶车辆调度算法研究:项目应用深度解析

自动驾驶车辆调度算法研究&#xff1a;项目应用深度解析当城市开始“呼吸”——智能交通的隐形大脑如何运作&#xff1f;你有没有想过&#xff0c;当一辆自动驾驶小巴缓缓驶向你家门口接你下班时&#xff0c;背后有多少场“看不见的博弈”正在发生&#xff1f;它为什么偏偏是这…

作者头像 李华
网站建设 2026/6/10 15:10:17

JavaScript 代码性能优化的基本原则

在现代 Web 开发中&#xff0c;JavaScript 代码的性能优化至关重要。随着 Web 应用的复杂度不断增加&#xff0c;用户对于页面响应速度和流畅度的要求也越来越高。优化 JavaScript 代码不仅可以提升用户体验&#xff0c;还能降低服务器负载&#xff0c;提高应用的整体性能。本文…

作者头像 李华
网站建设 2026/6/6 4:29:25

代码压缩与混淆:减小文件体积

在前端项目中&#xff0c;文件体积的大小对页面的加载速度和性能有着至关重要的影响。代码压缩与混淆是减小文件体积的重要手段&#xff0c;能够有效提升网站性能和用户体验。本文将深入探讨代码压缩与混淆的相关知识&#xff0c;包括原理、工具使用和实际操作等内容。 代码压缩…

作者头像 李华
网站建设 2026/6/10 16:51:29

PyTorch-CUDA-v2.6镜像与Host主机文件共享配置技巧

PyTorch-CUDA-v2.6镜像与Host主机文件共享配置技巧 在现代深度学习开发中&#xff0c;一个常见的痛点是&#xff1a;明明代码写得没问题&#xff0c;却因为环境版本不一致、GPU调用失败或数据路径混乱导致训练跑不起来。尤其当团队协作时&#xff0c;“在我机器上能运行”成了…

作者头像 李华