java.util.TreeMap类介绍

java.util.TreeMap是Java标准库中的一个类,用于实现有序的映射(Map)。它基于红黑树数据结构,提供了一个键值对的有序集合。TreeMap类实现了NavigableMap接口,并且继承了AbstractMap类。以下是TreeMap类的详细介绍:

主要特点

  1. 有序

    • TreeMap中的键是按照自然顺序或构造映射时提供的比较器顺序进行排序的。这使得键值对在TreeMap中保持有序。
  2. 基于红黑树

    • TreeMap使用红黑树(自平衡的二叉搜索树)作为内部数据结构,保证了基本操作(如插入、删除、查找)的时间复杂度为O(log n)。
  3. 允许null键和null

    • TreeMap不允许null键,但允许null值。如果尝试插入null键,会抛出NullPointerExceptionnull值是可以的,但要注意有时null值的操作可能会引发NullPointerException
  4. 实现接口

    • TreeMap实现了NavigableMap接口,提供了许多有用的方法,如获取范围内的子集、查找比给定键小或大的键等。

主要方法

  1. 构造函数

    • TreeMap():构造一个空的TreeMap,使用自然排序。
    • TreeMap(Comparator<? super K> comparator):构造一个空的TreeMap,使用指定的比较器进行排序。
    • TreeMap(Map<? extends K, ? extends V> m):构造一个包含指定映射中所有键值对的TreeMap
  2. 基本操作

    • V put(K key, V value):将指定的键值对插入到映射中。如果键已存在,更新其值。
    • V get(Object key):返回指定键的值,如果键不存在,则返回null
    • V remove(Object key):删除指定键的键值对。
    • boolean containsKey(Object key):检查映射中是否包含指定的键。
    • boolean containsValue(Object value):检查映射中是否包含指定的值。
  3. 导航操作

    • K firstKey():返回映射中的第一个键。
    • K lastKey():返回映射中的最后一个键。
    • Map.Entry<K, V> ceilingEntry(K key):返回大于或等于指定键的最小键的映射条目。
    • Map.Entry<K, V> floorEntry(K key):返回小于或等于指定键的最大键的映射条目。
    • Map.Entry<K, V> higherEntry(K key):返回大于指定键的最小键的映射条目。
    • Map.Entry<K, V> lowerEntry(K key):返回小于指定键的最大键的映射条目。
  4. 范围视图

    • NavigableMap<K, V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive):返回指定范围内的子映射。
    • NavigableMap<K, V> headMap(K toKey, boolean inclusive):返回小于指定键的所有键的子映射。
    • NavigableMap<K, V> tailMap(K fromKey, boolean inclusive):返回大于或等于指定键的所有键的子映射。

示例代码:


package com.example;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个TreeMap并插入键值对
        TreeMap<String, Integer> map = new TreeMap<>();
        map.put("Apple", 40);
        map.put("Banana", 10);
        map.put("Cherry", 20);
        map.put("Date", 30);

        // 输出TreeMap
        System.out.println("TreeMap: " + map);

        // 获取特定键的值
        System.out.println("Value for 'Banana': " + map.get("Banana"));

        // 删除特定键
        map.remove("Cherry");
        System.out.println("TreeMap after removal: " + map);

        // 获取第一个和最后一个键
        System.out.println("First key: " + map.firstKey());
        System.out.println("Last key: " + map.lastKey());

        // 获取一个范围内的子映射
        //包含从Apple到Date(根据fromInclusive和toInclusive的值)范围内的所有键值对
        NavigableMap<String, Integer> subMap = map.subMap("Apple", true, "Date", true);
        System.out.println("SubMap: " + subMap);
    }
}





  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值