这可能是一个非常简单的问题,但是如何将多个HashSets添加到PriorityQueue中呢?
我试过了:
PriorityQueue<HashSet<Integer>> priorityQueue = new PriorityQueue<HashSet<Integer>>();
priorityQueue.add(new HashSet<Integer>());
priorityQueue.add(new HashSet<Integer>());
System.out.println(priorityQueue.size());
和此:
PriorityQueue<HashSet<Integer>> priorityQueue = new PriorityQueue<HashSet<Integer>>();
for (int i = 0; i < 81; i++) {
priorityQueue.add(new HashSet<Integer>());
}
但我收到的错误是HashSet无法转换为Comparable:
Exception in thread "main" java.lang.ClassCastException: java.util.HashSet cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
at java.util.PriorityQueue.offer(PriorityQueue.java:344)
at java.util.PriorityQueue.add(PriorityQueue.java:321)
at attempt1.PQTest.main(PQTest.java:11)
答案 0 :(得分:0)
来自Java documentation page for PriorityQueue
优先级队列的元素按照其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。 (...)依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。
Comparable
未实现ClassCastException
,因为它无法真正了解您的HashSets应如何比较,因此您获得了{{1}}。因此,您必须创建一个实现Comparator的类,您将在其中按某些条件对这些HashSet进行排序,并将其实例提供给PriorityQueue构造函数。