HashMap基于哈希表实现,平均O(1)时间复杂度存取;键需正确重写hashCode()和equals();推荐泛型声明,Java 9+可用Map.of()创建不可变小Map;线程安全场景应选ConcurrentHashMap。

Java 中的 HashMap 是最常用的 Map 实现类,它基于哈希表实现,支持以 O(1) 平均时间复杂度 通过键(Key)快速存取值(Value)。使用前需注意:键必须正确重写 hashCode() 和 equals() 方法(对自定义对象尤其重要),否则会导致查不到、重复存入等问题。
声明与初始化 HashMap
推荐使用泛型明确键和值的类型,避免运行时类型错误:
- 基本用法:
Map<String, Integer> map = new HashMap<>(); - Java 9+ 可用静态工厂方法创建不可变小 Map:
Map.of("a", 1, "b", 2)(仅限固定少量数据) - 如需线程安全且允许并发读写,改用
ConcurrentHashMap,而非HashMap
添加与更新键值对
使用 put(K key, V value) 方法插入或替换数据:
- 若键已存在,新值会覆盖旧值,并返回被替换的旧值;若不存在,返回
null - 示例:
map.put("apple", 5); map.put("banana", 3); - Java 8 新增
putIfAbsent(key, value):仅当键不存在时才插入,避免误覆盖
通过键检索值
用 get(Object key) 获取对应值,这是核心高效操作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 若键存在,返回对应值;若不存在,返回
null(注意空值与未命中区分) - 安全获取建议配合
containsKey()或使用getOrDefault(key, defaultValue) - 示例:
Integer count = map.get("apple"); // 返回 5
遍历与常用判断
根据需求选择合适遍历方式:
- 只遍历值:
map.values().forEach(System.out::println); - 只遍历键:
map.keySet().forEach(System.out::println); - 遍历键值对(推荐):
map.forEach((k, v) -> System.out.println(k + "=" + v)); - 判断是否存在:
map.containsKey("apple")、map.containsValue(5)(后者是 O(n),慎用)
不复杂但容易忽略:确保键对象在放入后不修改影响 hashCode() 或 equals() 的字段(比如把作为键的 StringBuilder 再调用 append()),否则可能导致无法查到该键。

















