TreeMap 深度解析(基于 JDK 8)
TreeMap 是 Java 集合框架中基于红黑树实现的 Map 接口实现类,其核心特性是键的有序性—— 通过键的自然排序或定制排序维持键值对的顺序。与 HashMap 相比,TreeMap 不依赖哈希值,而是通过比较键的大小来组织数据,适用于需要有序键值对的场景。本文将从底层结构、排序机制、核心方法及红黑树平衡操作等方面,全面解析 TreeMap 的实现原理。
TreeMap 核心特性与继承关系
核心特性
- 有序性:键值对按键的顺序(自然排序或定制排序)存储,遍历顺序为键的升序(或定制排序顺序)。
- 无哈希冲突:基于红黑树实现,不依赖哈希值,因此不存在哈希冲突问题。
- 键不可为 null:自然排序时,键需实现
Comparable接口,compareTo方法无法处理null;定制排序时,若Comparator不支持null,则键也不能为null(否则抛出NullPointerException)。 - 非线程安全:多线程并发修改需手动同步(如使用
Collections.synchronizedSortedMap)。 - 导航方法:实现
NavigableMap接口,提供丰富的导航方法(如ceilingKey、floorKey、subMap等),方便范围查询。
继承关系

1 | public class TreeMap<K,V> extends AbstractMap<K,V> |
- 继承
AbstractMap:复用Map接口的基础实现(如entrySet、size等)。 - 实现
NavigableMap:扩展SortedMap接口,支持导航操作(如获取大于 / 小于某键的最值)。 - 实现
Cloneable:支持浅拷贝(复制红黑树结构,键值对对象本身不复制)。 - 实现
Serializable:支持序列化,通过自定义writeObject和readObject保存 / 恢复红黑树结构。
底层结构:红黑树
TreeMap 的底层是红黑树—— 一种自平衡二叉搜索树(BST),通过维护节点颜色和旋转操作,确保树的高度始终为 O(log n),从而保证增删改查的时间复杂度为 O(log n)。
红黑树的基本性质
红黑树通过以下性质维持平衡:

