use*_*037 0 java loops for-loop map
我想迭代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());
}
}
Run Code Online (Sandbox Code Playgroud)
我在日志中看到这个:
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
Run Code Online (Sandbox Code Playgroud)
有什么问题?
我怀疑你想要钥匙1,2和3 map1.
问题是您重复使用了相同的地图map1,并将其插入map2两次.因此,所有操作的累积结果map1是地图中只有4,5和6.视觉:
/1 ====v
map2 map1 -> (4 => 4.4), (5 => 5.5), (6 => 6.6)
\2 ====^
Run Code Online (Sandbox Code Playgroud)
要获得两个不同的地图,请map1在第一次插入后清除,创建新地图.更换
map1.clear();
Run Code Online (Sandbox Code Playgroud)
同
map1 = new HashMap<Integer, Double>();
Run Code Online (Sandbox Code Playgroud)
这将产生这样的:
/1====> (1 => 1.1), (2 => 2.2), (3 => 3.3)
map2
\2====> (4 => 4.4), (5 => 5.5), (6 => 6.6)
^
map1 ------/
Run Code Online (Sandbox Code Playgroud)