1. 程式人生 > >關於Map集合註意事項

關於Map集合註意事項

代碼 ash keys ear blog 主鍵 關於 stat win

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