Java TreeMap 数据结构

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Java 中的 TreeMap 类是 Java 集合框架的一部分,并实现了 Map 接口。与其他 Map 实现不同,它以排序的方式存储键值对。在本实验中,你将学习如何在 Java 程序中有效地使用 TreeMap 类。

创建 TreeMap

  • 打开你的文本编辑器,在 ~/project 目录下创建一个名为 TreeMapDemo.java 的新文件。
  • 导入所需的包:
import java.util.Map;
import java.util.TreeMap;
  • 创建一个 TreeMap 对象:
Map<Integer, String> map = new TreeMap<>();

向 TreeMap 中添加元素

  • 使用 put() 方法向 TreeMap 中添加元素:
map.put(1, "John");
map.put(2, "Mary");
map.put(3, "Peter");

将这些代码添加到 main 方法中。

打印 TreeMap

  • 使用 for-each 循环遍历 TreeMap:
for(Map.Entry<Integer, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

使用自定义排序

  • 创建一个名为 Employee 的新类:
class Employee implements Comparable<Employee> {
    private int id;
    private String name;

    public Employee(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public int compareTo(Employee e) {
        return this.id - e.getId();
    }
}
  • 向 TreeMap 中添加一些 Employee 对象:
Map<Employee, String> employeeMap = new TreeMap<>();
employeeMap.put(new Employee(3, "John"), "IT");
employeeMap.put(new Employee(2, "Mary"), "HR");
employeeMap.put(new Employee(1, "Peter"), "Finance");
  • 现在当你遍历 TreeMap 时,它将根据员工 ID 进行排序:
for(Map.Entry<Employee, String> entry : employeeMap.entrySet()) {
    System.out.println(entry.getKey().getId() + " "
                       + entry.getKey().getName() + " "
                       + entry.getValue());
}

使用 Comparator 进行排序

  • TreeMapDemo 类中定义一个自定义的 Comparator:
class DescendingOrder implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
}
  • 使用自定义的 Comparator 创建一个新的 TreeMap 对象:
Map<Integer, String> treeMap = new TreeMap<>(new DescendingOrder());
treeMap.put(1, "John");
treeMap.put(4, "Mary");
treeMap.put(2, "Peter");
  • 现在当你遍历 TreeMap 时,它将按降序排序:
for(Map.Entry<Integer, String> entry : treeMap.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

访问 Map 中的元素

  • 使用 get() 方法访问特定元素:
String name = map.get(1);
System.out.println("Name is " + name);

删除 Map 中的元素

  • 使用 remove() 方法删除特定元素:
String removedName = map.remove(2);
System.out.println("Removed: " + removedName);

获取 Map 的大小

  • 使用 size() 方法获取 TreeMap 中元素的数量:
int size = map.size();
System.out.println(size);

获取第一个和最后一个元素

  • 使用 firstKey()lastKey() 方法获取 TreeMap 中的第一个和最后一个元素:
int firstKey = map.firstKey();
int lastKey = map.lastKey();

获取范围内的元素

  • 使用 subMap() 方法获取范围内的元素:
Map<Integer, String> rangeMap = map.subMap(1, 3);
for(Map.Entry<Integer, String> entry : rangeMap.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

编译并运行程序

  • 打开终端并导航到 ~/project 目录。
  • 使用 javac 命令编译 TreeMapDemo.java 文件:
javac TreeMapDemo.java
  • 使用 java 命令运行程序:
java TreeMapDemo

总结

在本实验中,你学习了 Java 中的 TreeMap 类以及如何有效地在程序中使用它。你学习了如何创建 TreeMap、添加和删除元素,以及根据特定条件检索元素。你还学习了如何使用 Comparator 自定义排序顺序。TreeMap 类为键值对的排序和存储提供了极大的灵活性和控制能力。