如何重写TreeMap的比较器[重复]

问题描述 投票:0回答:3

我目前正在实现TreeMap来存储键值对,其中键是常规String,值是对象堆栈。据我了解(这是我第一次使用Map,所以我非常绿色),TreeMap类使用键的自然顺序对其自身进行排序,但是我希望按字典顺序对其进行排序。再次,据我了解,它的比较器方法可以被覆盖以完成此操作。我已经对如何使它变得字典式有了一个想法,我的问题在于我不知道如何实际覆盖该方法。是否将覆盖的部分放在正在使用TreeMap的类中?我是否必须创建一个单独的类,称为树图,并在其中编写新方法?覆盖比较方法的特殊语法(如果有)是什么?很抱歉,这个问题似乎很基本,但是我对此并不陌生,在网上看时,我一直难以找到我完全理解的解释。预先感谢您的帮助和耐心!

java sorting compare comparator treemap
3个回答
2
投票

以这个为例:

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);
  }
}

1
投票

TreeMap类具有接受自定义Comparator对象的特定构造函数。您可以将逻辑放入通过的比较器中。


1
投票

实际上,您可以将自己的Comparator实例传递给TreeMap的构造函数之一。使用lambda表达式,您甚至可以将其简化为:

TreeMap<String, String> t = new TreeMap<>(String::compareTo);
© www.soinside.com 2019 - 2024. All rights reserved.