# Map基础
作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)
Map 是 Java 集合框架中用于存储键值对(key-value)映射关系的接口。每个 key 是唯一的,value 可重复。
# 一、HashMap
# 特点:
- Java 最常用的 Map 实现,底层由 数组 + 链表 + 红黑树(JDK 1.8后) 组成。
- key 无序,允许一个
null键和多个null值。 - 线程不安全,适用于单线程场景。
# 应用场景:
- 快速查找/插入/删除操作。
- 不关心顺序,且单线程场景。
# 示例代码:
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put(null, 3); // 允许一个null键
System.out.println("HashMap内容:" + map);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 二、LinkedHashMap
# 特点:
- 是
HashMap的子类,底层通过 双向链表 维护插入顺序。 - 迭代输出顺序与插入顺序一致。
- 性能略低于
HashMap,但顺序可控。
# 应用场景:
- 需要保持 key 的插入顺序。
- 如实现简单的 LRU 缓存。
# 示例代码:
import java.util.LinkedHashMap;
public class LinkedHashMapDemo {
public static void main(String[] args) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("C", 1);
map.put("A", 2);
map.put("B", 3);
System.out.println("插入顺序保留:" + map);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 三、TreeMap
# 特点:
- 基于 红黑树 实现。
- key 自动按 自然顺序(或指定 Comparator) 排序。
- 不允许
null键。
# 应用场景:
- 需要对 key 进行排序存储。
- 如:字典、排行榜、范围查询。
# 示例代码:
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
map.put("Banana", 2);
map.put("Apple", 1);
map.put("Orange", 3);
System.out.println("自动排序:" + map);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 四、ConcurrentHashMap
# 特点:
- Java 并发包中的线程安全 Map 实现。
- JDK 1.7 基于分段锁(Segment),JDK 1.8 改为 CAS + synchronized + 链表/红黑树。
- 不允许
null键或null值。
# 应用场景:
- 多线程环境下高性能的 Map 使用场景。
- 如:Web缓存、本地并发上下文等。
# 示例代码:
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapDemo {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("Java", 1);
map.put("Go", 2);
System.out.println("线程安全的Map:" + map);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
← Set基础 集合的遍历与迭代机制 →