为什么我不能使用我的PriorityQueue添加一个Object

时间:2016-03-21 14:01:22

标签: java queue priority-queue

exception on eclipse

为什么我不能在我的PriorityQueue中添加一个Object?即使我已经初始化了我的PriorityQueue

2 个答案:

答案 0 :(得分:1)

PriorityQueue对您添加的项目进行排序,以便在您致电take()时始终检索到“最小”项。

因此,先决条件是您存储在那里的对象可以相互比较,以便队列可以正确地对它们进行排序。

为此,您有两个选择:

  • 对象可以实现Comparable
  • 或者,您可以通过其构造函数向Comparator本身提供PriorityQueue

您收到错误的原因是因为您提供的Comparatornull,因此PriorityQueue依赖于Comparable对象 - 我想你的{ {1}}类不是。因此Gokhemon抱怨它无法正确排序其项目。

参考: https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html

  

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

答案 1 :(得分:0)

图片显示NullPointerException方法中引发了PriorityQueue.add。 (实际上是对offer的嵌套调用...)

问题不在于队列是null。 NPE将被输入>>你的<<代码,如果那是问题。问题不在于您使用null比较器实例化了队列。根据javadoc,这应该有用。

实际问题是您正在向队列添加null个对象。 javadoc说,如果你这样做,你将得到一个NPE。