Java-Map系列(HashMap、LinkedHashMap、TreeMap)对比

发布于:2025-07-31 ⋅ 阅读:(17) ⋅ 点赞:(0)


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} (📈自动升序排序)

记住要点:

  1. HashMap:性能最好,日常开发最常用,但不管顺序
  2. LinkedHashMap:需要记录添加顺序时用它。
  3. TreeMap:需要按键排序时用它(性能略低于HashMap)。

这三个例子直观展示了图中强调的“特点由键决定”的核心思想以及各自的核心特性(无序、插入有序、按键排序)。尝试运行代码,观察输出,理解会更深刻!


网站公告

今日签到

点亮在社区的每一天
去签到