为什么我不能用我的PriorityQueue添加对象

为什么我不能用我的PriorityQueue添加对象

问题描述:

exception on eclipse为什么我不能用我的PriorityQueue添加对象

我为什么不能将对象添加到我的PriorityQueue?即使我已经初始化了我的PriorityQueue

+1

你需要给我们更多的东西比这个。你有什么尝试? – SubliemeSiem

+6

欢迎来到Stack Overflow。请提供代码和错误本身,作为文本而不是截图,最好以[mcve]的形式提供。在那个时候,它可能很容易帮助你。 –

+0

从JavaDoc:*“优先级队列不允许空元素”*。异常肯定说你尝试'提供()'null在某处。 –

A PriorityQueue对您添加的项目进行排序,以便您在拨打take()时始终检索到第一个“最小”项。

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

对于这一点,你有两个选择:

  • 对象可以实现Comparable
  • 或者你可以提供一个ComparatorPriorityQueue本身,通过其构造。

为什么你得到一个错误,是因为您提供的Comparatornull,所以PriorityQueue依靠的对象是Comparable的原因 - 我猜你的Gokhemon类是没有的。所以PriorityQueue抱怨说它无法正确分拣它的物品。

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

优先级队列的元素根据它们的自然顺序进行排序,或者通过在队列构造的时候提供一比较器,这取决于所使用的构造方法。 (...)优先级队列依靠自然顺序也不允许不可比较的对象的插入(这样做可能会导致抛出ClassCastException)

该图像示出一个NullPointerExceptionPriorityQueue.add方法中抛出。 (实际上在嵌套调用offer ...)

问题不是队列是null。如果这是NPE的话,那么NPE将被抛入>>您的< <代码中。问题不在于你用null比较器实例化队列。据javadoc称,这应该起作用。

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