线程 "main" java.lang.ClassCastException 中的异常:带有优先级队列和比较器
Exception in thread "main" java.lang.ClassCastException: with priority queue and comparator
这段代码有什么问题。我收到以下错误消息。
Exception in thread "main" java.lang.ClassCastException: Nodes cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(Unknown Source)
at java.util.PriorityQueue.siftUp(Unknown Source)
at java.util.PriorityQueue.offer(Unknown Source)
at java.util.PriorityQueue.add(Unknown Source)
请帮忙
import java.util.Comparator;
import java.util.InputMismatchException;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
class Nodes implements Comparator<Nodes> {
public int n;
public int c;
public Nodes() {
}
public Nodes(int n, int c) {
this.n = n;
this.c = c;
}
@Override
public int compare(Nodes Nodes1, Nodes Nodes2) {
if (Nodes1.c < Nodes2.c) {
return -1;
}
if (Nodes1.c > Nodes2.c) {
return 1;
}
return 0;
}
}
class dj
{
public static void main(String[] args) {
Queue<Nodes> pq = new PriorityQueue<Nodes>();
pq.add(new Nodes(5,4));
pq.add(new Nodes(6,7));
pq.add(new Nodes(7,6));
pq.add(new Nodes(8,9));
pq.add(new Nodes(9,8));
pq.add(new Nodes(8,8));
}
}
您收到此错误是因为您实现了错误的接口。
你需要的是
class Nodes implements Comparable<Nodes>
这表示节点class可以与其他节点进行比较。
这是在 PriorityQueue 中使用它所需要的。
Comparator 是一个 Class 比较对象,即使它们本身没有实现 Comparable。它通常可以传递给特定的排序函数,并且通常独立于 Class 本身(您可以有多个具有不同逻辑的比较器)
有关详细信息,请参阅 2 Classes 的 JavaDoc:
https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
这段代码有什么问题。我收到以下错误消息。
Exception in thread "main" java.lang.ClassCastException: Nodes cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(Unknown Source)
at java.util.PriorityQueue.siftUp(Unknown Source)
at java.util.PriorityQueue.offer(Unknown Source)
at java.util.PriorityQueue.add(Unknown Source)
请帮忙
import java.util.Comparator;
import java.util.InputMismatchException;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
class Nodes implements Comparator<Nodes> {
public int n;
public int c;
public Nodes() {
}
public Nodes(int n, int c) {
this.n = n;
this.c = c;
}
@Override
public int compare(Nodes Nodes1, Nodes Nodes2) {
if (Nodes1.c < Nodes2.c) {
return -1;
}
if (Nodes1.c > Nodes2.c) {
return 1;
}
return 0;
}
}
class dj
{
public static void main(String[] args) {
Queue<Nodes> pq = new PriorityQueue<Nodes>();
pq.add(new Nodes(5,4));
pq.add(new Nodes(6,7));
pq.add(new Nodes(7,6));
pq.add(new Nodes(8,9));
pq.add(new Nodes(9,8));
pq.add(new Nodes(8,8));
}
}
您收到此错误是因为您实现了错误的接口。
你需要的是
class Nodes implements Comparable<Nodes>
这表示节点class可以与其他节点进行比较。 这是在 PriorityQueue 中使用它所需要的。
Comparator 是一个 Class 比较对象,即使它们本身没有实现 Comparable。它通常可以传递给特定的排序函数,并且通常独立于 Class 本身(您可以有多个具有不同逻辑的比较器)
有关详细信息,请参阅 2 Classes 的 JavaDoc:
https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html