TreeMap

TreeMap

TreeMap 是 Java 中的一种有序映射表,它基于红黑树(Red-Black Tree)实现。TreeMap 继承自 AbstractMap 类并实现了 NavigableMap 接口。

主要特点和使用说明:

  1. 有序性: TreeMap 中的元素是有序的,根据键的自然顺序或者通过构造函数提供的 Comparator 进行排序。这使得 TreeMap 中的键值对按照一定的顺序存储,便于检索和遍历。

  2. 底层数据结构: TreeMap 使用红黑树(Red-Black Tree)作为底层的数据结构,确保了查找、插入和删除操作的对数时间复杂度。

  3. 键的唯一性: TreeMap 中的键是唯一的,每个键最多关联一个值。

  4. 自然排序和定制排序: 如果键实现了 Comparable 接口,那么就按照键的自然顺序进行排序。如果没有实现 Comparable 接口,可以在构造函数中提供一个 Comparator 来指定排序规则。

以下是一个简单的示例演示了如何使用 TreeMap

import java.util.*;

public class TreeMapExample {
    public static void main(String[] args) {
        // 创建一个 TreeMap
        TreeMap<String, Integer> treeMap = new TreeMap<>();

        // 添加键值对
        treeMap.put("Three", 3);
        treeMap.put("One", 1);
        treeMap.put("Four", 4);
        treeMap.put("Two", 2);

        // 遍历 TreeMap
        for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }

        // 输出结果将按照键的自然顺序排序
    }
}

在上述示例中,TreeMap 中的键值对按照键的自然顺序进行了排序。你也可以通过提供自定义的 Comparator 来实现定制排序。

需要注意的是,TreeMap 不允许键为 null,因为它依赖键的顺序。如果需要键为 null,可以考虑使用 HashMap

各种Map

  1. HashMap:

    • 底层实现: 基于哈希表,使用数组和链表/红黑树来实现。
    • 特点:
      • 无序:迭代顺序不保证稳定。
      • 允许 null 作为键和值。
      • 支持高效的插入和查找操作。
    • 适用场景:
      • 当不需要保留插入顺序,且对迭代顺序没有特殊要求时。
      • 需要高效的插入和查找操作时。
  2. TreeMap:

    • 底层实现: 基于红黑树,是一种自平衡的二叉查找树。
    • 特点:
      • 有序:根据键的自然顺序或提供的 Comparator 进行排序。
      • 不允许键为 null
    • 适用场景:
      • 当需要按照键的顺序进行有序存储和遍历时。
      • 不允许键为 null 的情况。
  3. LinkedHashMap:

    • 底层实现: 继承自 HashMap,通过双向链表维护插入顺序。
    • 特点:
      • 保留插入顺序。
      • 可以选择根据访问顺序进行排序。
    • 适用场景:
      • 当需要保留插入顺序时。
      • 当需要实现 LRU(Least Recently Used)缓存时,可以使用基于访问顺序的 LinkedHashMap
  4. HashTable:

    • 底层实现: 基于哈希表。
    • 特点:
      • 线程安全,每个方法都被 synchronized 关键字修饰。
      • 不允许键或值为 null
    • 适用场景:
      • 在多线程环境中,需要保证线程安全的情况下使用。
      • 不允许键或值为 null
  5. ConcurrentHashMap:

    • 底层实现: 基于哈希表,采用分段锁机制。
    • 特点:
      • 线程安全,支持高并发的读和一定程度的并发写。
      • 不使用全局锁,而是采用分段锁,提高并发性能。
    • 适用场景:
      • 在高并发场景下,读操作远远多于写操作时,使用 ConcurrentHashMap 可以获得更好的性能。
      • 在需要保证线程安全的情况下,性能要求较高。
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码有点萌

谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值