为什么我不能在我的PriorityQueue中添加一个Object?即使我已经初始化了我的PriorityQueue
答案 0 :(得分:1)
PriorityQueue
对您添加的项目进行排序,以便在您致电take()
时始终检索到“最小”项。
因此,先决条件是您存储在那里的对象可以相互比较,以便队列可以正确地对它们进行排序。
为此,您有两个选择:
Comparable
Comparator
本身提供PriorityQueue
。您收到错误的原因是因为您提供的Comparator
为null
,因此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。