2016-03-21 138 views
-5

exception on eclipse爲什麼我不能用我的PriorityQueue添加對象

我爲什麼不能將對象添加到我的PriorityQueue?即使我已經初始化了我的PriorityQueue

+1

你需要給我們更多的東西比這個。你有什麼嘗試? – SubliemeSiem

+6

歡迎來到Stack Overflow。請提供代碼和錯誤本身,作爲文本而不是截圖,最好以[mcve]的形式提供。在那個時候,它可能很容易幫助你。 –

+0

從JavaDoc:*「優先級隊列不允許空元素」*。異常肯定說你嘗試'提供()'null在某處。 –

回答

1

A PriorityQueue對您添加的項目進行排序,以便您在撥打take()時始終檢索到第一個「最小」項。

其中,前提條件是您存儲在那裏的對象可以相互比較,以便隊列可以正確地對它們進行排序。

對於這一點,你有兩個選擇:

  • 對象可以實現Comparable
  • 或者你可以提供一個ComparatorPriorityQueue本身,通過其構造。

爲什麼你得到一個錯誤,是因爲您提供的Comparatornull,所以PriorityQueue依靠的對象是Comparable的原因 - 我猜你的Gokhemon類是沒有的。所以PriorityQueue抱怨說它無法正確分揀它的物品。

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

優先級隊列的元素根據它們的自然順序進行排序,或者通過在隊列構造的時候提供一比較器,這取決於所使用的構造方法。 (...)優先級隊列依靠自然順序也不允許不可比較的對象的插入(這樣做可能會導致拋出ClassCastException)

0

該圖像示出一個NullPointerExceptionPriorityQueue.add方法中拋出。 (實際上在嵌套調用offer ...)

問題不是隊列是null。如果這是NPE的話,那麼NPE將被拋入>>您的< <代碼中。問題不在於你用null比較器實例化隊列。據javadoc稱,這應該起作用。

實際的問題是,您正在向隊列中添加一個null對象。 javadoc說如果你這樣做,你會得到一個NPE。

相關問題