我需要迭代FastMap.values。 我的問題是基本環路故障轉移NullPointerException異常空指針異常 - 遍歷FastMap值
基本循環
Collection<Order> orders = myObject.getOpenOrders();
for (Order order : orders) {
}
問題是,在我的系統另一個線程編輯fastmap 它添加和刪除元素,它和我得到的NullPointerException異常。 很少,但應該解決。
所以我加空檢查
Collection<Order> orders = myObject.getOpenOrders();
for (Order order : orders) {
if (order != null)
}
和我仍然得到NullPointerExcetion 所以,我想重複其如下
FastMap<String, Order> openOrders = myObject.getOpenOrdersMap();
for (FastMap.Entry<String, Order> e = openOrders.head(), end = openOrders.tail(); (e = e.getNext()) != end && e != null;) {
Order order = e.getValue();
}
但是當它得到null,而不是拋出的循環停止NullPointerExcetion。 這也是一個問題,因爲我需要迭代所有的元素。
我認爲問題是for迭代使用values(),它實際上是一個指向列表的指針。 我試圖複製列表,但是我也在複製過程中得到了NullPointerExcetion。 任何建議
順便說一句:我知道改變整個設計是最好的解決方案,並在每個插入和讀取使用鎖。但是爲了解決我的問題,是否可以做出一些較小的更改?
有什麼想法?
Javolution'FastMap'? IIRC,Javolution提出了各種瘋狂的聲明,但實施卻顯然是錯誤的。如果你真的需要併發集合,我建議'java.util.concurrent'。/NullPointerException應該包含觸發位置的細節。 – 2012-04-16 14:58:41