当前位置:首页 > Java > 正文

深入理解Java TreeMap(从零开始掌握有序映射)

在Java编程中,TreeMap 是一个非常实用的集合类,它实现了 Map 接口,并且能够自动对键(key)进行排序。无论你是刚接触Java的小白,还是有一定经验的开发者,掌握 Java TreeMap 都能让你的代码更高效、更清晰。

深入理解Java TreeMap(从零开始掌握有序映射) Java TreeMap  TreeMap教程 Java集合框架 有序Map 第1张

什么是TreeMap?

TreeMap 是 Java 集合框架(Java集合框架)的一部分,位于 java.util 包中。它基于红黑树(Red-Black Tree)实现,因此具有以下特点:

  • 键值对按键的自然顺序或自定义比较器排序
  • 不允许 null 键(但允许 null 值,前提是使用自定义比较器)
  • 插入、删除、查找的时间复杂度为 O(log n)
  • 非线程安全

TreeMap基本用法

下面是一个简单的 TreeMap教程 示例,展示如何创建和使用 TreeMap:

import java.util.TreeMap;public class TreeMapExample {    public static void main(String[] args) {        // 创建一个TreeMap        TreeMap<String, Integer> scores = new TreeMap<>();        // 添加键值对        scores.put("Alice", 95);        scores.put("Bob", 88);        scores.put("Charlie", 92);        // 遍历TreeMap(按键排序)        for (String name : scores.keySet()) {            System.out.println(name + ": " + scores.get(name));        }    }}  

运行结果会按字母顺序输出:

Alice: 95Bob: 88Charlie: 92  

自定义排序方式

如果你希望按值排序,或者使用不同的排序规则,可以传入一个 Comparator

// 按字符串长度排序(升序)TreeMap<String, Integer> map = new TreeMap<>((s1, s2) -> s1.length() - s2.length());map.put("Hi", 1);map.put("Hello", 2);map.put("A", 3);// 输出顺序:A, Hi, HelloSystem.out.println(map.keySet());  

常用方法一览

方法 说明
put(K key, V value) 插入键值对
get(Object key) 根据键获取值
firstKey() / lastKey() 获取最小/最大键
subMap(K from, K to) 返回指定范围的子映射

TreeMap vs HashMap

很多初学者会混淆 TreeMap 和 HashMap。关键区别在于:

  • HashMap:无序,允许 null 键和 null 值,性能更高(O(1) 平均查找)
  • TreeMap有序Map,按键自动排序,不支持 null 键(除非自定义比较器),性能稍低(O(log n))

总结

通过本篇 Java TreeMap 教程,你应该已经掌握了 TreeMap 的基本概念、用法、排序机制以及与 HashMap 的区别。TreeMap 特别适合需要按键排序的场景,比如排行榜、字典、区间查询等。

记住:当你需要一个自动排序的 Map 时,TreeMap 就是你的最佳选择!