我目前正在实现TreeMap来存储键值对,其中键是常规String,值是对象堆栈。据我了解(这是我第一次使用Map,所以我非常绿色),TreeMap类使用键的自然顺序对其自身进行排序,但是我希望按字典顺序对其进行排序。再次,据我了解,它的比较器方法可以被覆盖以完成此操作。我已经对如何使它变得字典式有了一个想法,我的问题在于我不知道如何实际覆盖该方法。是否将覆盖的部分放在正在使用TreeMap的类中?我是否必须创建一个单独的类,称为树图,并在其中编写新方法?覆盖比较方法的特殊语法(如果有)是什么?很抱歉,这个问题似乎很基本,但是我对此并不陌生,在网上看时,我一直难以找到我完全理解的解释。预先感谢您的帮助和耐心!
以这个为例:
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
类具有接受自定义Comparator
对象的特定构造函数。您可以将逻辑放入通过的比较器中。
实际上,您可以将自己的Comparator实例传递给TreeMap的构造函数之一。使用lambda表达式,您甚至可以将其简化为:
TreeMap<String, String> t = new TreeMap<>(String::compareTo);