gpt4 book ai didi

Java TreeSet 不接受已经实现类似功能的客户对象

转载 作者:行者123 更新时间:2023-12-02 08:58:18 25 4
gpt4 key购买 nike

这是我的代码

public class SetTest {
public static void main(String[] args) {
SortedSet<Node> sortedSet = new TreeSet<>();
PriorityQueue<Node> priorityQueue = new PriorityQueue<>();
for (int i = 0; i < 100; i++) {
Node node = new Node(i);
sortedSet.add(node);
priorityQueue.add(node);
}
sortedSet.iterator().forEachRemaining(s -> {
System.out.println(s.id);
});
}

static class Node implements Comparator<Node> {
int id;

public Node(int id) {
this.id = id;

}

@Override
public int compare(Node o1, Node o2) {
if (o1.id < o2.id)
return -1;
if (o1.id > o2.id)
return 1;
return 0;
}
}
}

我得到这个异常:

SetTest$Node cannot be cast to java.lang.Comparable

您可以看到 Node 类已经植入了类似的内容,那么为什么强制类型转换不能按预期工作呢?

最佳答案

替换

static class Node implements Comparator<Node> {
int id;

public Node(int id) {
this.id = id;

}

@Override
public int compare(Node o1, Node o2) {
if (o1.id < o2.id)
return -1;
if (o1.id > o2.id)
return 1;
return 0;
}
}

static class Node implements Comparable<Node> {
int id;

public Node(int id) {
this.id = id;

}
@Override
public int compareTo(Node o) {
// Or, easier: return Integer.compare(this.id, o.id);
if (this.id < o.id)
return -1;
if (this.id > o.id)
return 1;
return 0;
}
}

关于Java TreeSet 不接受已经实现类似功能的客户对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60355949/

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