当前位置: 首页 > 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.jsqmd.com/news/111310/

相关文章:

  • P2680 [NOIP 2015 提高组] 运输计划
  • STM32学习笔记CAN
  • 知识城燕窝哪家好:权威TOP5榜单深度解析 - 品牌测评家
  • 【毕业设计】基于springboot+微信小程序的羽球快讯爱好者平台小程序(源码+文档+远程调试,全bao定制等)
  • 静待鱼跃龙门 —— 我是鲤鱼
  • 在线客服插件修改8282端口为8080端口
  • 实用指南:即插即用系列 | TGRS 2025 GST-Net:基于“相对运动模式”与“全局时空融合”的红外小目标检测
  • 【建议收藏】AI大模型应用开发全攻略:Messages、RAG、Agent、ReAct等核心技术深度解析
  • Seekdb试用心得
  • 《创业之路》-742-技术创业者面临哪些问题?
  • 26、SVG 样式设计全解析
  • 如何为超宽屏显示器选择 KVM 切换器?
  • 工艺过程镜像系统:制造过程的数字孪生
  • Cursor 快捷键全集:提升效率的隐藏秘笈
  • Mathcad的野路子】11kW PFC参数计算书实战拆解
  • 【已解决】PyCharm中使用uv创建项目时Python安装失败的问题
  • 多路定制化电源模块测试解决方案案例-纳米软件
  • 高通跃龙QCS6490平台视频录制与上传(1): 系统环境搭建指南
  • 基于LSTM - AdaBoost的多输入单输出回归预测
  • 在家开泰拉瑞亚私服,搭载cpolar让外地朋友也能玩!
  • ate电源测试设备详解-纳米软件
  • 20、WinJS 应用样式与控件风格全解析
  • 光伏并网系统的仿真就像搭积木,每个模块看似独立却又环环相扣。今天咱们直接上手拆解这个光伏三相并网Simulink模型,顺便聊聊那些藏在模块背后的“骚操作
  • 数字化转型中的测试角色
  • 小程序毕设选题推荐:基于微信小程序的智能学习小程序【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Chain33 Orderbook:去中心化订单簿的创新架构与实现
  • 测试流程的标准化与灵活性:在结构与适应之间寻找最优解
  • 21、WinJS 控件样式全解析
  • 基于SSA-LSTM-DCNN的光伏故障诊断:探索更优之路
  • 大模型3年工作经验,为何不如校招的一张白纸?