如何覆盖 TreeMap 的比较器
How to override comparator for TreeMap
我目前正在实现一个 TreeMap 来存储键值对,其中键是一个常规字符串,值是一堆对象。据我了解(这是我第一次使用 Map,所以我很新手),TreeMap class 使用键的自然顺序对自身进行排序,但是我希望它按字典顺序排序。再次根据我的理解,可以覆盖它的比较器方法来实现这一点。我已经知道如何将其编入词典,我的问题在于我不知道如何实际覆盖该方法。我是否将覆盖的部分放在我正在使用 TreeMap 的 class 中?我是否必须制作一个单独的 class 调用树图并在那里编写新方法?覆盖比较方法的特殊语法(如果有的话)是什么?如果这个问题看起来很基本,我很抱歉,但我对此很陌生并且在网上寻找我一直在努力寻找我完全理解的解释。预先感谢您的帮助和耐心等待!
以此为例:
class SortAscendingComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
}
public class Demo {
public static void main(String[] args) {
SortedMap<String, String> map = new TreeMap<>(new SortAscendingComparator());
map.put("c", "c");
map.put("a", "a");
map.put("b", "b");
// Displays: {a=a, b=b, c=c}
System.out.println(map);
}
}
TreeMap
class 具有接受自定义 Comparator
对象的特定构造函数。您可以将您的逻辑放入传递的比较器中。
实际上,您可以将自己的 Comparator 实例传递给 TreeMap 的构造函数之一。使用 lambda 表达式,您甚至可以将其简化为:
TreeMap<String, String> t = new TreeMap<>(String::compareTo);
我目前正在实现一个 TreeMap 来存储键值对,其中键是一个常规字符串,值是一堆对象。据我了解(这是我第一次使用 Map,所以我很新手),TreeMap class 使用键的自然顺序对自身进行排序,但是我希望它按字典顺序排序。再次根据我的理解,可以覆盖它的比较器方法来实现这一点。我已经知道如何将其编入词典,我的问题在于我不知道如何实际覆盖该方法。我是否将覆盖的部分放在我正在使用 TreeMap 的 class 中?我是否必须制作一个单独的 class 调用树图并在那里编写新方法?覆盖比较方法的特殊语法(如果有的话)是什么?如果这个问题看起来很基本,我很抱歉,但我对此很陌生并且在网上寻找我一直在努力寻找我完全理解的解释。预先感谢您的帮助和耐心等待!
以此为例:
class SortAscendingComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
}
public class Demo {
public static void main(String[] args) {
SortedMap<String, String> map = new TreeMap<>(new SortAscendingComparator());
map.put("c", "c");
map.put("a", "a");
map.put("b", "b");
// Displays: {a=a, b=b, c=c}
System.out.println(map);
}
}
TreeMap
class 具有接受自定义 Comparator
对象的特定构造函数。您可以将您的逻辑放入传递的比较器中。
实际上,您可以将自己的 Comparator 实例传递给 TreeMap 的构造函数之一。使用 lambda 表达式,您甚至可以将其简化为:
TreeMap<String, String> t = new TreeMap<>(String::compareTo);