📜  Java中的 TreeMap 比较器()方法和示例(1)

📅  最后修改于: 2023-12-03 14:42:53.045000             🧑  作者: Mango

Java中的 TreeMap 比较器()方法和示例

Java中的 TreeMap 是一种基于红黑树实现的有序映射表。在默认情况下,TreeMap 将使用被插入的键的自然顺序来进行排序。然而,在一些情况下,我们需要指定自己的比较规则来排序。这时,我们就需要使用 TreeMap 的比较器方法。

TreeMap 的比较器() 方法

在 Java 中,TreeMap 提供了两种方法用于设置比较规则,分别是:

  • TreeMap():使用自然顺序排序。
  • TreeMap(Comparator<? super K> comparator):使用指定的比较器进行排序。

在第二种方法中,参数 comparator 是一个比较器对象。在实现此接口的类中,需要定义一个 compare 方法来比较两个对象的大小,这可以是一个自定义的规则。

示例

下面我们来看一个 TreeMap 比较器的示例:

import java.util.Comparator;
import java.util.TreeMap;
 
public class TreeMapExample {
    public static void main(String[] args) {
        // 使用自然顺序排序的 Map
        TreeMap<Integer, String> treeMap1 = new TreeMap<>();
 
        treeMap1.put(10, "Java");
        treeMap1.put(20, "Python");
        treeMap1.put(5, "Ruby");
        treeMap1.put(35, "PHP");
        treeMap1.put(45, "C++");
 
        System.out.println("TreeMap 默认排序:" + treeMap1);
 
        // 使用比较器排序的 Map
        TreeMap<Integer, String> treeMap2 = new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1; // 降序排序
            }
        });
 
        treeMap2.put(10, "Java");
        treeMap2.put(20, "Python");
        treeMap2.put(5, "Ruby");
        treeMap2.put(35, "PHP");
        treeMap2.put(45, "C++");
 
        System.out.println("TreeMap 比较器排序:" + treeMap2);
    }
}

输出结果如下:

TreeMap 默认排序:{5=Ruby, 10=Java, 20=Python, 35=PHP, 45=C++}
TreeMap 比较器排序:{45=C++, 35=PHP, 20=Python, 10=Java, 5=Ruby}

在示例中,我们定义了两个 TreeMap 变量,一个使用默认的自然顺序排序,另一个使用比较器排序。比较器采用的是降序排序,将大的数字排在前面。在输出结果中,我们可以看到,第一个 TreeMap 的键值是按照自然顺序排序的,而第二个 TreeMap 的键值是按照降序排序的。

总结

通过本文,我们对 Java 中的 TreeMap 进行了一些基础介绍。TreeMap 是一个有序的映射表,可以根据自然顺序排序或使用自定义的规则进行排序。对于需要自定义排序的场景,我们可以使用 TreeMap 的比较器方法来实现。