【JAVA】TreeMap 详解

TreeMap

TreeMap 是 Java 中一种实现了 NavigableMap 接口的有序 Map,它基于红黑树(Red-Black Tree)实现。与 HashMap 不同,TreeMap 中的键是有序的,这意味着它能够以排序的方式存储键值对,并提供与排序相关的操作。以下是 TreeMap 的详细介绍:

1. 基本概念

  • 有序性:TreeMap 中的元素是按照键的自然顺序(即实现 Comparable 接口)或通过提供的 Comparator 进行排序的。无论是插入、删除还是遍历操作,TreeMap 都会维护键的顺序。
  • 红黑树:TreeMap 底层基于红黑树实现,红黑树是一种自平衡二叉搜索树。在红黑树中,插入和删除操作的时间复杂度为 O(log n),而查找操作也能在 O(log n) 时间内完成。

2. 主要特性

  • 自动排序:TreeMap 自动根据键的顺序对元素进行排序。如果使用自定义的 Comparator,则会按照自定义规则进行排序。
  • 线程不安全:与 HashMap 类似,TreeMap 不是线程安全的。如果需要在多线程环境中使用,可以使用 Collections.synchronizedSortedMap 方法获得一个同步的 TreeMap,或者使用 ConcurrentSkipListMap。
  • 不允许空键:TreeMap 不允许存储 null 键,否则会抛出 NullPointerException。但允许值为 null。

3. 核心类与字段

3.1 Entry<K, V> 类

TreeMap 中的每个元素被封装在一个 Entry<K, V> 对象中。Entry 类定义如下:

static final class Entry<K,V> implements Map.Entry<K,V> {
   
   
    K key;           // 键
    V value;         // 值
    Entry<K,V> left; // 左子节点
    Entry<K,V> right;// 右子节点
    Entry<K,V> parent; // 父节点
    boolean color = BLACK; // 节点颜色(红色或黑色)

    Entry(K key, V value, Entry<K,V> parent) {
   
   
        this.key = key;
        this.value = value;
        this.parent = parent;
    }

    public K getKey() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值