【详解TreeMap】

在这里插入图片描述
曾梦想执剑走天涯,我是程序猿【AK】

在这里插入图片描述

简述概要

提示:简要描述文章内容,适合哪些人观看

知识图谱

TreeMap 是 Java 中的一个基于红黑树(一种自平衡二叉查找树)实现的有序映射(Map)接口。它按照键(key)的自然顺序(自然排序)或者根据创建时提供的 Comparator 来存储键值对。在 TreeMap 中,键值对是按照键的升序排列的,这意味着你可以进行高效的有序键值对操作。

主要特性:

  1. 有序性TreeMap 中的元素是有序的,这意味着你可以按照键的顺序遍历 TreeMap

  2. 唯一性TreeMap 中的键是唯一的,不允许有重复的键。

  3. 排序TreeMap 可以自然排序,也可以通过自定义 Comparator 来定义排序规则。

  4. 性能:由于底层是红黑树,TreeMap 在插入、删除和查找操作上具有对数时间复杂度(O(log n))。

核心方法:

  • put(K key, V value):添加或替换键值对。如果键已存在,则替换其值。
  • get(Object key):根据键获取对应的值。
  • remove(Object key):移除指定键的键值对。
  • containsKey(Object key):检查是否包含指定的键。
  • containsValue(Object value):检查是否包含指定的值。
  • keySet():返回键的集合视图,这些键按自然顺序或自定义顺序排序。
  • values():返回值的集合视图。注意,values() 返回的集合不是有序的。
  • entrySet():返回键值对的集合视图。这个集合是有序的,并且按照键的顺序排列。

使用场景:

  • 当你需要一个有序的映射时,TreeMap 是一个很好的选择。
  • 如果你需要快速查找、插入和删除操作,并且对数据的顺序有要求,TreeMap 也很适合。

示例代码:

import java.util.TreeMap;

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

        // 使用自然排序(升序)
        treeMap.put(3, "C");
        treeMap.put(1, "A");
        treeMap.put(2, "B");

        // 遍历 TreeMap
        System.out.println("Natural order:");
        for (Integer key : treeMap.keySet()) {
            System.out.println(key + " = " + treeMap.get(key));
        }

        // 使用自定义 Comparator 进行降序排序
        TreeMap<Integer, String> treeMapDesc = new TreeMap<>((a, b) -> b.compareTo(a));
        treeMapDesc.put(3, "C");
        treeMapDesc.put(1, "A");
        treeMapDesc.put(2, "B");

        System.out.println("\nCustom order (descending):");
        for (Integer key : treeMapDesc.keySet()) {
            System.out.println(key + " = " + treeMapDesc.get(key));
        }
    }
}

在这个示例中,我们创建了两个 TreeMap 实例。第一个实例使用自然排序(升序),而第二个实例使用自定义的 Comparator 来实现降序排序。我们通过 keySet() 方法遍历 TreeMap,它返回的键是有序的。

TreeMap 是 Java 集合框架中的一个重要组成部分,它提供了一种在保持数据有序的同时进行高效操作的方式。

后续更新数据结构与算法篇时,会在此篇更新上链接,详解下红黑树(TreeMap即红黑树结构)......



                                                                                                         ---- 永不磨灭的番号:我是AK



在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AK@

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值