java - map 迭代出现问题

标签 java loops for-loop dictionary

我想迭代Map,其中的值是另一个Map。 我有这个方法:

 public void test(){
   Map<Integer, Double> map1 = new HashMap<Integer, Double>();
   Map<Integer, Map<Integer, Double>> map2 = new HashMap<Integer, Map<Integer, Double>>();
   map1.put(1,1.1);
   map1.put(2,2.2);
   map1.put(3,3.3);
   map2.put(1,map1);
   map1.clear();
   map1.put(4,4.4);
   map1.put(5,5.5);
   map1.put(6,6.6);
   map2.put(2,map1);

   for (Map.Entry<Integer, Map<Integer, Double>> entry : map2.entrySet()){
       Log.d("test", "map2 key " + entry.getKey());
       Map<Integer, Double> tempMap = new HashMap<Integer, Double>(entry.getValue());
       for (Map.Entry<Integer, Double> entry1 : tempMap.entrySet()){
           Log.d("map", "map1 key " + entry1.getKey() + "map1 value " + entry1.getValue());
       }
   }

我在日志中看到:

map2 key 1
map1 key 4 map1 value 4.4
map1 key 5 map1 value 5.5
map1 key 6 map1 value 6.6
map2 key 2
map1 key 4 map1 value 4.4
map1 key 5 map1 value 5.5
map1 key 6 map1 value 6.6

有什么问题吗?

最佳答案

我怀疑您希望键 1、2 和 3 在 map1 中可用。

问题在于您重复使用了同一个 map map1,并将其插入到 map2 中两次。所以对map1所有操作的累积结果是map中只有4、5、6。视觉上:

   /1 ====v
map2    map1 -> (4 => 4.4), (5 => 5.5), (6 => 6.6)
   \2 ====^

要获得两个不同的 map ,请在第一次插入后不要清除map1,而是创建一个新 map 。替换

map1.clear();

map1 = new HashMap<Integer, Double>();

这将产生:

   /1====> (1 => 1.1), (2 => 2.2), (3 => 3.3)
map2    
   \2====> (4 => 4.4), (5 => 5.5), (6 => 6.6)
            ^
map1  ------/

关于java - map 迭代出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051124/

相关文章:

for-loop - 如何将 JavaScript for 循环转换为 CoffeeScript?

java - 从按钮数组中获取文本

java - 将 jar 导入 lucene ant 构建脚本

JavaScript 如果答案正确,则生成新字符串

java - Java For 循环中的逻辑错误

javascript - 如何在 JavaScript 中使用循环函数声明变量 x1、x2、...、x10?

java - Spring Boot Rest Api 在 N 个并行保存请求后卡住了

java - 无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment](已更新)

list - Haskell 遍历列表

xcode - 快速检测正确的文本字段以添加属性