我需要迭代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