TreeMap

2023-12-18 19:50:40

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 可以获得更好的性能。
      • 在需要保证线程安全的情况下,性能要求较高。

文章来源:https://blog.csdn.net/weixin_61281255/article/details/135065006
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。