关于Map集合注意事项

Posted 头石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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集合注意事项的主要内容,如果未能解决你的问题,请参考以下文章

Java深入理解及巩固 Map & Set 集合

ThreadLocal内存泄漏需要注意的

关于空间/时间的 Groovy 集合性能注意事项

[Go]新手入门:map的介绍与使用

[Go]新手入门:map的介绍与使用

关于JS中的map函数需要注意的地方