gpt4 book ai didi

java - 构造函数中的匿名比较器使用强制转换为 Comparable

转载 作者:行者123 更新时间:2023-12-02 13:24:51 24 4
gpt4 key购买 nike

我在构造函数内编写匿名比较器时遇到问题。我的指示如下:

“你的代码应该假设键类型是可比较的,即实现 Comparable”

但是,我们正在使用

private Comparator<K> _comparator;

我们的数据结构还有一个私有(private)的 Node 类:

private static class Node<K,V> extends AbstractEntry<K,V> {
Node<K,V> left, right;
Node(K k, V v) {
super(k,v);
left = right = null;
}
}

我确实尝试这样写:

public TreeMap() {

_comparator = (Comparator<K>) new Comparator<Node<K,V>>(){
@Override
public int compare(Node<K, V> o1, Node<K, V> o2) {
return ((Integer) o1.getKey()).compareTo((Integer) o2.getKey());

}
};
}

但是这是不正确的,因为我们不应该比较节点,或者假设该键是整数。我还应该对 Comparable 使用未经检查的强制转换,但我不知道如何或在哪里执行此操作。

作业的实际说明如下:

您将编写的类中有两个构造函数:一个采用键类型的比较器,该比较器不能为 null。另一个则不然,但如果使用此构造函数,您的代码应该假设键类型是可比较的,即实现 Comparable。然后使用这个假设来创建一个比较器,该比较器使用compareTo 方法来完成其工作。

任何提示或想法将不胜感激。

最佳答案

好的。因此,您需要编写一个比较器,使用它们的自然顺序对可比较的键进行排序。 IE。它应该只委托(delegate)给他们的compareTo 方法。

所以你想要

Comparator<K> comparator = (a, b) -> ((Comparable<K>) a).compareTo(b);

或者,如果您确实想将其编写为匿名内部类:

Comparator<K> comparator = new Comparator<K>() {
@Override
public int compare(K a, K b) {
return ((Comparable<K>) a).compareTo(b);
}
};

关于java - 构造函数中的匿名比较器使用强制转换为 Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43431781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com