Java 如何在构造函数中实例化比较器

Java 如何在构造函数中实例化比较器,java,comparator,treemap,Java,Comparator,Treemap,我从未见过在树映射结构的构造函数中创建比较器。一个人怎么做呢?有没有办法让TreeMap()构造函数调用另一个具有comparator参数的TreeMap构造函数来设置comparator private Comparator<? super K> cmp; private Node root; private int size; private final String indentStr = " "; public TreeMap() { // Create cmp

我从未见过在树映射结构的构造函数中创建比较器。一个人怎么做呢?有没有办法让TreeMap()构造函数调用另一个具有comparator参数的TreeMap构造函数来设置comparator

private Comparator<? super K> cmp;
private Node root;
private int size;
private final String indentStr = "   ";

public TreeMap() {
    // Create cmp assuming K implements Comparator
    //???  TreeMap(new Comparator<V>());
}

public TreeMap(Comparator<? super K> cmp) {
    this.cmp = cmp;
}

private Comparator他们通常将该字段设置为
null
,而不是实例化某些内容

但如果您愿意,您可以:

this(new Comparator<K>() {
   public int compare(K k1, K k2) {
       return ((Comparable<K>) k1).compareTo(k2);
   }
});
this(新的比较器(){
公共整数比较(kk1,kk2){
回报率((可比)k1),比(k2);
}
});

问题是可能会发生
ClassCastException
,因为您不知道元素的类型。

他们通常将该字段设置为
null
,而不是实例化某些内容

但如果您愿意,您可以:

this(new Comparator<K>() {
   public int compare(K k1, K k2) {
       return ((Comparable<K>) k1).compareTo(k2);
   }
});
this(新的比较器(){
公共整数比较(kk1,kk2){
回报率((可比)k1),比(k2);
}
});

问题是
ClassCastException
可能会发生,因为您不知道元素的类型。

如何
返回((可比)k1)?ClassCastException?当然,你可以这样做,但也可能失败。我在答案中添加了
return((可比)k1)?ClassCastException?当然,你可以这样做,但也可能失败。我还是把它加到了答案里