關於Map集合註意事項
今日代碼中循環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)。
關於Map集合註意事項