一、核心概念
1. 基本定义
- Python字典(
dict
) :动态类型键值对集合,语法简洁,支持快速查找。 - Java Map:接口,常用实现类如
HashMap
、LinkedHashMap
,需声明键值类型(泛型)。
2. 核心特性
特性 | Python字典 | Java HashMap |
---|---|---|
键唯一性 | ✅ | ✅ |
顺序保证 | ✅(Python 3.7+) | ❌(需用 LinkedHashMap ) |
线程安全 | ❌ | ❌(需用 ConcurrentHashMap ) |
空键值支持 | 键不可为None | ✅(允许null 键值) |
二、常用操作对比
1. 创建与初始化
# Python
d = {"name": "Alice", "age": 30}
// Java
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
ages.put("Bob", 25);
2. 增删改查
操作 | Python语法 | Java方法 |
---|---|---|
添加/更新键值 | d["key"] = value | map.put("key", value) |
获取值 | d.get("key", default) | map.getOrDefault("key", default) |
删除键值对 | del d["key"] | map.remove("key") |
检查键是否存在 | "key" in d | map.containsKey("key") |
3. 遍历操作
# Python
for key, value in d.items():
print(key, value)
// Java(增强for循环)
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// Lambda表达式(Java 8+)
ages.forEach((k, v) -> System.out.println(k + " -> " + v));
三、Java Map实现类选型
实现类 | 特点 | 适用场景 |
---|---|---|
HashMap | 无序,查找高效(O(1)) | 常规键值存储 |
LinkedHashMap | 保持插入顺序或访问顺序 | 需要有序遍历 |
TreeMap | 按键自然排序(或自定义Comparator) | 需要排序的键值对 |
ConcurrentHashMap | 线程安全,高并发优化 | 多线程共享数据 |
四、进阶用法
1. 合并字典
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();
map1.putAll(map2); // 合并map2到map1
2. 计算大小与判空
int size = map.size(); // 键值对数量
boolean isEmpty = map.isEmpty();
3. 默认值处理
// 若键不存在,返回默认值0
int age = map.getOrDefault("Unknown", 0);
五、注意事项
-
泛型类型约束
Java需明确声明键值类型,如Map<String, Integer>
,而Python无类型限制。 -
空键值风险
Java允许null
键值,但需避免误用:map.put(null, 100); // 允许,但可能引发NPE
-
线程安全
多线程环境下优先使用ConcurrentHashMap
或Collections.synchronizedMap()
。 -
性能优化
- 初始化时指定容量:
new HashMap<>(100)
减少扩容开销。 - 频繁遍历时优先用
LinkedHashMap
。
- 初始化时指定容量:
六、总结
- 核心等价关系:Python字典 ≈ Java的
HashMap
。 - 选择建议:
- 常规场景用
HashMap
。 - 有序需求用
LinkedHashMap
。 - 并发场景用
ConcurrentHashMap
。
- 常规场景用
- 语法差异:Java代码更冗长,但类型安全和性能优化更强。