亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java TreeMap 完全掌握:有序 Map 实战指南

Java TreeMap

探索 Java TreeMap 类 — 强大的天然有序 Map 实现 — 含清晰示例、关键操作与高级导航技巧。

TreeMap 类属于 Java 集合框架,提供红黑树实现,按键的自然顺序或自定义 Comparator 保持条目有序。它实现 NavigableMap 接口,新增便捷方法用于遍历和查询 Map。

Java TreeMap 完全掌握:有序 Map 实战指南

创建 TreeMap

使用前先导入包:

import java.util.TreeMap;

再创建实例:

TreeMap<Key, Value> numbers = new TreeMap<>();

默认按键自然升序排序。需自定义顺序时,向构造器传入 Comparator。


TreeMap 方法概览

该类提供丰富操作。下文按关键类别附代码片段。


插入元素

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> evenNumbers = new TreeMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        evenNumbers.putIfAbsent("Six", 6);
        System.out.println("偶数 TreeMap: " + evenNumbers);
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.putAll(evenNumbers);
        System.out.println("数字 TreeMap: " + numbers);
    }
}

输出

偶数 TreeMap: {Four=4, Six=6, Two=2}
数字 TreeMap: {Four=4, One=1, Six=6, Two=2}

访问元素

使用集合视图

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("TreeMap: " + numbers);
        System.out.println("键值映射: " + numbers.entrySet());
        System.out.println("Keys: " + numbers.keySet());
        System.out.println("Values: " + numbers.values());
    }
}

输出

TreeMap: {One=1, Three=3, Two=2}
键值映射: [One=1, Three=3, Two=2]
Keys: [One, Three, Two]
Values: [1, 3, 2]

获取值

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("TreeMap: " + numbers);
        int value1 = numbers.get("Three");
        System.out.println("get(): " + value1);
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("getOrDefault(): " + value2);
    }
}

输出

TreeMap: {One=1, Three=3, Two=2}
get(): 3
getOrDefault(): 5

移除条目

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("TreeMap: " + numbers);
        int removed = numbers.remove("Two");
        System.out.println("移除的值: " + removed);
        boolean removedPair = numbers.remove("Three", 3);
        System.out.println("条目 {Three=3} 是否移除? " + removedPair);
        System.out.println("更新后的 TreeMap: " + numbers);
    }
}

输出

TreeMap: {One=1, Three=3, Two=2}
移除的值: 2
条目 {Three=3} 是否移除? true
更新后的 TreeMap: {One=1}

替换值

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        System.out.println("原始 TreeMap: " + numbers);
        numbers.replace("Second", 22);
        numbers.replace("Third", 3, 33);
        System.out.println("replace() 后: " + numbers);
        numbers.replaceAll((k, v) -> v + 2);
        System.out.println("replaceAll() 后: " + numbers);
    }
}

输出

原始 TreeMap: {First=1, Second=2, Third=3}
replace() 后: {First=1, Second=22, Third=33}
replaceAll() 后: {First=3, Second=24, Third=35}

因 TreeMap 实现 NavigableMap,提供高效查询结构的方法。

首尾元素

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        System.out.println("TreeMap: " + numbers);
        System.out.println("First Key: " + numbers.firstKey());
        System.out.println("Last Key: " + numbers.lastKey());
        System.out.println("First Entry: " + numbers.firstEntry());
        System.out.println("Last Entry: " + numbers.lastEntry());
    }
}

输出

TreeMap: {First=1, Second=2, Third=3}
First Key: First
Last Key: Third
First Entry: First=1
Last Entry: Third=3

Ceiling、Floor、Higher、Lower

这些方法返回相对于给定键的键或条目,便于范围查询。

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 5);
        numbers.put("Third", 4);
        numbers.put("Fourth", 6);
        System.out.println("TreeMap: " + numbers);
        System.out.println("higherKey('Fourth'): " + numbers.higherKey("Fourth"));
        System.out.println("higherEntry('Fourth'): " + numbers.higherEntry("Fourth"));
        System.out.println("lowerKey('Fourth'): " + numbers.lowerKey("Fourth"));
        System.out.println("lowerEntry('Fourth'): " + numbers.lowerEntry("Fourth"));
        System.out.println("ceilingKey('Fourth'): " + numbers.ceilingKey("Fourth"));
        System.out.println("ceilingEntry('Fourth'): " + numbers.ceilingEntry("Fourth"));
        System.out.println("floorKey('Fourth'): " + numbers.floorKey("Fourth"));
        System.out.println("floorEntry('Fourth'): " + numbers.floorEntry("Fourth"));
    }
}

输出

TreeMap: {First=1, Fourth=6, Second=5, Third=4}
higherKey('Fourth'): Second
higherEntry('Fourth'): Second=5
lowerKey('Fourth'): First
lowerEntry('Fourth'): First=1
ceilingKey('Fourth'): Fourth
ceilingEntry('Fourth'): Fourth=6
floorKey('Fourth'): Fourth
floorEntry('Fourth'): Fourth=6

Polling 与范围视图

pollFirstEntry() 和 pollLastEntry() 分别移除并返回首/尾条目。

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        System.out.println("TreeMap: " + numbers);
        System.out.println("pollFirstEntry(): " + numbers.pollFirstEntry());
        System.out.println("pollLastEntry(): " + numbers.pollLastEntry());
        System.out.println("更新后的 TreeMap: " + numbers);
    }
}

输出

TreeMap: {First=1, Second=2, Third=3}
pollFirstEntry(): First=1
pollLastEntry(): Third=3
更新后的 TreeMap: {Second=2}

headMap、tailMap、subMap

这些方法提供特定键范围的视图。

示例:

import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        numbers.put("Fourth", 4);
        System.out.println("TreeMap: " + numbers);
        System.out.println("headMap('Fourth'): " + numbers.headMap("Fourth"));
        System.out.println("headMap('Fourth', true): " + numbers.headMap("Fourth", true));
        System.out.println("tailMap('Second'): " + numbers.tailMap("Second"));
        System.out.println("tailMap('Second', false): " + numbers.tailMap("Second", false));
        System.out.println("subMap('Fourth', true, 'Third', false): " + numbers.subMap("Fourth", true, "Third", false));
    }
}

输出

TreeMap: {First=1, Fourth=4, Second=2, Third=3}
headMap('Fourth'): {First=1}
headMap('Fourth', true): {First=1, Fourth=4}
tailMap('Second'): {Second=2, Third=3, Fourth=4}
tailMap('Second', false): {Third=3, Fourth=4}
subMap('Fourth', true, 'Third', false): {Fourth=4, Second=2}

其他工具方法

方法说明
clone()创建 Map 浅拷贝
containsKey()检查键是否存在
containsValue()检查特定值
size()返回条目数
clear()移除所有条目

使用 Comparator 自定义键顺序

需不同排序(如逆序、大小写不敏感字符串)时,实现 Comparator 并传给 TreeMap 构造器。

import java.util.TreeMap;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> numbers = new TreeMap<>(new CustomComparator());
        numbers.put("First", 1);
        numbers.put("Second", 2);
        numbers.put("Third", 3);
        numbers.put("Fourth", 4);
        System.out.println("TreeMap: " + numbers);
    }
    static class CustomComparator implements Comparator<String> {
        @Override
        public int compare(String a, String b) {
            // 逆序
            return a.compareTo(b) * -1;
        }
    }
}

输出

TreeMap: {Third=3, Second=2, Fourth=4, First=1}

更多 Comparator 信息请见官方 Java 文档。

java

  1. MATLAB 数值类型详解:存储、转换与范围查询
  2. 精通 Java 运算符:类型、语法与实战示例
  3. Java 注释:类型、用法与最佳实践
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. 精通 Java 字符串:创建、方法与最佳实践
  6. 精通 Java 接口:概念、实现与最佳实践
  7. 精通 Java 匿名内部类:定义、语法与实战示例
  8. 精通 Java Try-With-Resources:自动资源管理详解
  9. Java 注解详解:类型、放置位置与实战示例
  10. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  11. 掌握 Java 集合算法:排序、打乱、搜索与更多实用操作
  12. Java 生成随机数实战:Random 与 Math.random 详解