关于Map集合注意事项

it2024-10-20  17

今日代码中循环Map时,采用循环主键

Map<Integer,Map<Integer,String>> status =  new HashMap<>();

Set<Integer> set = status.keySet(); if(set.contains(groupid)){ Map<Integer,String> ledNode = status.get(groupid); ledNode.put(winLedId, node); status.put(groupid, ledNode); }else{ Map<Integer,String> newLedNode = new HashMap<>(); newLedNode.put(winLedId, node); status.put(groupid, newLedNode); }

这里如果多个线程调用这个方法,一个对map获取get,一个对map添加put。那么get的会报错,Set<Integer> set = status.keySet();set集合改变了。

所以对map循环时:

1现将map 克隆出来一份,在对其遍历 。

2将set集合转化成一个数组,

Set<Date> set = map.keySet(); Date[] dateArray = new Date[set.size()]; set.toArray(dateArray);

再遍历数组,就不会报错。

还有就是判断一个值是一个map的主键时,也应该注意,

Set<Integer> set = status.keySet();

set.contain(key);

可以直接调用

status.containsKey(key)。

转载于:https://www.cnblogs.com/xlblog/p/8575997.html

相关资源:Java实现Map集合遍历的四种常见方式与用法分析
最新回复(0)