zoukankan      html  css  js  c++  java
  • 关于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)。

  • 相关阅读:
    Java线程死锁模拟
    Arrays Multi
    PHP Forms
    simple grammer
    有意义的命名 Meaningful names
    整洁代码
    XPath
    多态
    复用类
    访问控制权限
  • 原文地址:https://www.cnblogs.com/xlblog/p/8575997.html
Copyright © 2011-2022 走看看