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

java基础-Map接口

在Java中,Map是一个非常重要的接口,它表示键值对(Key-Value)的映射集合。Map 不允许重复的键,每个键最多只能映射到一个值。

Map 接口的主要特点

  • 键唯一性:不允许重复的键

  • 键值对存储:每个元素包含一个键和一个值

  • 无序(某些实现类有序):不保证元素的顺序

常用的 Map 实现类

1. HashMap

import java.util.*; // 创建 HashMap Map<String, Integer> hashMap = new HashMap<>(); // 添加元素 hashMap.put("Alice", 25); hashMap.put("Bob", 30); hashMap.put("Charlie", 28); // 获取元素 int age = hashMap.get("Alice"); // 25 // 遍历 Map for (Map.Entry<String, Integer> entry : hashMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }

2. LinkedHashMap

// 保持插入顺序 Map<String, Integer> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("Zoe", 22); linkedHashMap.put("Alice", 25); linkedHashMap.put("Bob", 30); // 遍历时保持插入顺序 for (String key : linkedHashMap.keySet()) { System.out.println(key); // Zoe, Alice, Bob }

3. TreeMap

// 按键的自然顺序或自定义比较器排序 Map<String, Integer> treeMap = new TreeMap<>(); treeMap.put("Zoe", 22); treeMap.put("Alice", 25); treeMap.put("Bob", 30); // 遍历时按键排序 for (String key : treeMap.keySet()) { System.out.println(key); // Alice, Bob, Zoe }

常用方法

Map<String, String> map = new HashMap<>(); // 添加元素 map.put("key1", "value1"); map.put("key2", "value2"); // 获取元素 String value = map.get("key1"); // 检查键是否存在 boolean exists = map.containsKey("key1"); // 检查值是否存在 boolean valueExists = map.containsValue("value1"); // 删除元素 map.remove("key1"); // 获取大小 int size = map.size(); // 检查是否为空 boolean isEmpty = map.isEmpty(); // 获取所有键的集合 Set<String> keys = map.keySet(); // 获取所有值的集合 Collection<String> values = map.values(); // 获取所有键值对的集合 Set<Map.Entry<String, String>> entries = map.entrySet(); // 清空Map map.clear();

Java 8+ 的新特性

Map<String, Integer> map = new HashMap<>(); // putIfAbsent - 如果键不存在则添加 map.putIfAbsent("key1", 100); // compute - 计算新值 map.compute("key1", (k, v) -> v == null ? 0 : v + 1); // computeIfAbsent - 如果键不存在则计算新值 map.computeIfAbsent("key2", k -> 50); // computeIfPresent - 如果键存在则计算新值 map.computeIfPresent("key1", (k, v) -> v * 2); // merge - 合并值 map.merge("key1", 10, (oldValue, newValue) -> oldValue + newValue); // forEach - 遍历 map.forEach((k, v) -> System.out.println(k + ": " + v)); // getOrDefault - 获取值或默认值 int value = map.getOrDefault("nonexistent", 0);

线程安全的 Map

ConcurrentHashMap

import java.util.concurrent.ConcurrentHashMap; // 线程安全的 HashMap Map<String, Integer> concurrentMap = new ConcurrentHashMap<>(); concurrentMap.put("key1", 100);

Collections.synchronizedMap

// 将普通 Map 转换为线程安全的 Map Map<String, Integer> syncMap = Collections.synchronizedMap(new HashMap<>());

使用示例

public class MapExample { public static void main(String[] args) { // 统计单词出现次数 String text = "hello world hello java world java programming"; String[] words = text.split(" "); Map<String, Integer> wordCount = new HashMap<>(); for (String word : words) { wordCount.merge(word, 1, Integer::sum); } // 输出结果 wordCount.forEach((word, count) -> System.out.println(word + ": " + count)); } }

Map 是 Java 集合框架中非常实用的数据结构,广泛应用于缓存、配置管理、数据统计等场景。

http://www.cnnetsun.cn/news/137396.html

相关文章:

  • Apifox:API 接口自动化测试完全指南
  • 正反向代理:网络安全核心技术
  • 别被忽悠了!一文讲透MES管理系统本地部署与SaaS模式的真正底牌
  • 【毕业设计】基于springboot+微信小程序的羽球快讯爱好者平台小程序(源码+文档+远程调试,全bao定制等)
  • 小程序计算机毕设之基于SpringBoot的宠物领养微信小程序基于springboot+微信小程序的宠物领养系统小程序(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序计算机毕设之基于springboot+微信小程序的大学生餐厅点餐系统小程序基于springboot微信小程序的校园食堂订餐服务系统(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机小程序毕设实战-基于springboot+微信小程序的影院售票系统设计与实现基于SpringBoot的电影购票平台微信小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机小程序毕设实战-基于springboot+微信小程序的羽球快讯爱好者平台小程序羽毛球场预定app_羽毛球预约管家【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 11、文本与盒子属性的CSS技巧解析
  • 23、WinJS控件样式与样式规则定位指南
  • 27、Windows 8 应用开发中的 SVG 样式设计
  • SAP ABAP拆分交货单数量、批次、存储地点 并过账
  • 基于MPC的智能车运动预测和控制算法 Motion predication; Kinemati...
  • Mathcad的野路子】11kW PFC参数计算书实战拆解
  • STM32学习笔记CAN
  • 搭建你的第一个“私有知识库” (RAG)
  • 13、Unix 系统磁盘管理与安全定位脚本实用指南
  • 15、系统管理脚本实用指南
  • 怎么选一款适合大面积清洁的多功能全自动洗地机呢?
  • 使用matlab编写m脚本,编写无迹卡尔曼滤波算法(UKF)估计电池SOC,注释清晰
  • 教培行业新媒体运营困境凸显!这款软件或成转型制胜法宝?
  • Photoshop Neural Filters:把“引擎截图”秒变“电影级美宣”?AI 深度模糊与色彩迁移工作流
  • 基于matlab的多目标优化算法NSGA3,动态输出优化过程,得到最终的多目标优化结果。 数据...
  • 12.18
  • COCO 数据集
  • 国内好用的测试用例管理工具有哪些?
  • 24、COM+ 事务管理与补偿资源管理器详解
  • YOLO深度学习模型的训练参数配置与优化
  • 数字孪生可视化模板怎么用?5大行业Demo拆解,帮你快速复用提效
  • 必藏!程序员转型AI大模型:机遇、路径与成功率拆解