Java:如何将MULTIPLE HashSets添加到PriorityQueue中?

时间:2016-10-09 20:48:25

标签: java size priority-queue hashset

这可能是一个非常简单的问题,但是如何将多个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)

1 个答案:

答案 0 :(得分:0)

来自Java documentation page for PriorityQueue

  

优先级队列的元素按照其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。 (...)依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。

Comparable未实现ClassCastException,因为它无法真正了解您的HashSets应如何比较,因此您获得了{{1}}。因此,您必须创建一个实现Comparator的类,您将在其中按某些条件对这些HashSet进行排序,并将其实例提供给PriorityQueue构造函数。