HashMap
- 无序、不重复、无索引 (最常用)
import java.util.HashMap;
import java.util.Map;
public class SimpleHashMapDemo {
public static void main(String[] args) {
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("张三", 90); // 添加键值对
studentScores.put("李四", 85);
studentScores.put("王五", 95);
studentScores.put("张三", 88); // 键重复,覆盖前面张三的90
System.out.println(studentScores); // 输出: {李四=85, 张三=88, 王五=95} 🚪 (顺序随机,无规律)
}
}
- 符合:
- 无序: 输出的顺序(
李四
,张三
,王五
) 与你添加的顺序(张三
,李四
,王五
) 完全不同。HashMap不保证任何顺序(无论是插入还是其它)。 - 不重复: 键
"张三"
只出现了一次,第二次put
覆盖了第一次的值(90 -> 88)。 - 无索引: 你不能像数组或List那样用
get(0)
访问第一个元素(也没第一个的概念)。
- 无序: 输出的顺序(
LinkedHashMap
- 有序(插入顺序)、不重复、无索引
import java.util.LinkedHashMap;
import java.util.Map;
public class SimpleLinkedHashMapDemo {
public static void main(String[] args) {
Map<String, Integer> studentScores = new LinkedHashMap<>();
studentScores.put("张三", 90);
studentScores.put("李四", 85);
studentScores.put("王五", 95);
studentScores.put("张三", 88); // 键重复,覆盖
System.out.println(studentScores); // 输出: {张三=88, 李四=85, 王五=95} 📊 (严格按照添加顺序)
}
}
- 符合
- 有序(插入顺序): 输出的顺序(
张三
,李四
,王五
) 与你添加的顺序完全一致。它维护了键值对插入的先后顺序。 - 不重复: 键
"张三"
重复,覆盖。 - 无索引: 同样不能按索引访问。
- 有序(插入顺序): 输出的顺序(
TreeMap
- 排序(键默认升序)、不重复、无索引
import java.util.Map;
import java.util.TreeMap;
public class SimpleTreeMapDemo {
public static void main(String[] args) {
Map<String, Integer> studentScores = new TreeMap<>();
studentScores.put("Orange", 10);
studentScores.put("Apple", 20);
studentScores.put("Banana", 15);
studentScores.put("apple", 5); // 注意大小写不同,不算重复!
studentScores.put("Apple", 25); // 键重复,覆盖
System.out.println(studentScores); // 输出: {Apple=25, Banana=15, Orange=10, apple=5} 📈 (默认按字母升序排序)
}
}
- 符合
- 排序(键默认升序): 输出的顺序(
Apple
,Banana
,Orange
,apple
) 是按照键(字符串)的字母升序排列的(注意A
<B
<O
<a
的字母表顺序)。 - 不重复: 键
"Apple"
重复,覆盖。 - 无索引: 不能按索引访问。
- 排序(键默认升序): 输出的顺序(
快速对比总结 (核心特点来自图中的“由键决定”):
集合类型 | 核心特点 | 适用场景举例 | 示例输出特性 |
---|---|---|---|
HashMap | 无序、不重复、无索引 (查找最快) | 快速存取数据,不关心顺序 (如缓存) | {李四=85, 张三=88, 王五=95} (🚪顺序随机) |
LinkedHashMap | 有序(插入顺序)、不重复、无索引 | 需要记录添加顺序 (如操作记录、LRU缓存基础) | {张三=88, 李四=85, 王五=95} (📊保留插入序) |
TreeMap | 排序(键默认升序)、不重复、无索引 | 需要按键的自然或自定义顺序遍历 (如字典序) | {Apple=25, Banana=15, Orange=10, apple=5} (📈自动升序排序) |
记住要点:
HashMap
:性能最好,日常开发最常用,但不管顺序。LinkedHashMap
:需要记录添加顺序时用它。TreeMap
:需要按键排序时用它(性能略低于HashMap)。
这三个例子直观展示了图中强调的“特点由键决定”的核心思想以及各自的核心特性(无序、插入有序、按键排序)。尝试运行代码,观察输出,理解会更深刻!