遍历List的时候不能删除元素。代码如下:
private final static Map<String, List<Map<String, String>>> newServerInfo
= new HashMap<String, List<Map<String, String>>>();
private final static Map<String, Long> newServerInfoDate = new HashMap<String, Long>();
for (Entry<String, Long> entry : newServerInfoDate.entrySet()) {
String key = entry.getKey();
long date = entry.getValue();
System.out.println(System.currentTimeMillis() - date + "---"+ outTimeNum * 1000);
if (System.currentTimeMillis() - date >= outTimeNum * 1000) {
newServerInfo.remove(key);
newServerInfoDate.remove(key);
if (newServerInfoDate.size() == 0)
break;
}
}for循环遍历时不可删除,修改如下:
List<String> removeKey = new ArrayList<String>();
for (Entry<String, Long> entry : newServerInfoDate.entrySet()) {
String key = entry.getKey();
long date = entry.getValue();
System.out.println(System.currentTimeMillis() - date + "---"+ outTimeNum * 1000);
if (System.currentTimeMillis() - date >= outTimeNum * 1000) {
removeKey.add(key);
if (newServerInfoDate.size() == 0)
break;
}
}
for (String key : removeKey) {
newServerInfo.remove(key);
newServerInfoDate.remove(key);
}遍历时,把需要删除的元素的key保存下来,遍历完成之后再删除。
本文介绍了一种在遍历Map时避免直接删除元素的方法,通过先记录要删除的键,遍历后再进行删除,有效避免了并发修改异常。
421

被折叠的 条评论
为什么被折叠?



