今天小编去笔试遇到一个蛮有意思的笔试题,题目不难,在此分享给大家,希望大家能共同研究。
直接上题目:
public void a() {
List<Map<String,Integer>> list = new ArrayList<Map<String,Integer>>();
Map<String,Integer> map = new HashMap<String,Integer>();
for (int i=0; i < 10; i++) {
map.put(“a”, i);
list.add(map);
}
for (Map<String,Integer> temp : list) {
System.out.print(temp.get(“a”));
}
}
-------------------------------------------------------------------------------------------------------------
public void b() {
List<Map<String,Integer>> list = new ArrayList<Map<String,Integer>>();
for (int i=0; i < 10; i++) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put(“a”, i);
list.add(map);
}
for (Map<String,Integer> temp : list) {
System.out.print(temp.get(“a”));
}
}
写出上述两个方法的打印结果:
a:9 9 9 9 9 9 9 9 9 9(10个9);
b:0 1 2 3 4 5 6 7 8 9
原因解析:
a:这是由于Map中相同的key值会覆盖的问题;且a中map为为同一个对象,所有的值会被最后一个值9覆盖,
b:在循环中new新的map,属于不同的对象,所以会按0到9输出。
初始见到觉得挺有新意,因为之前一直没考虑在外面new Hashmap<>();也算是有一些成长吧。