Map<String,List<String>> map=new HashMap<String,List<String>>();
List<String> li=new ArrayList<String>();
li.add("123");
map.put("a", li);
li.clear();
li.add("321");
map.put("b", li);
System.out.println(map.get("a").get(0));
System.out.println(map.get("b").get(0));都是321 why?
List<String> li=new ArrayList<String>();
li.add("123");
map.put("a", li);
li.clear();
li.add("321");
map.put("b", li);
System.out.println(map.get("a").get(0));
System.out.println(map.get("b").get(0));都是321 why?
map.put("a", li);
map.put("b", li);
都是指向相同地址,只要li里面的值一变 两个都跟着变的。
则li.add("123"),即向A区存放了个“123”的数据 (现在A区存有“123“)
li.clear(),是把A区存放是数据清空 (现在A区无数据)
li.add("321"); 向A区添加了数据”321“ (现在A区存有“321“) map.put("a", li);
map.put("b", li);
map存放的只是li这个引用,它指向的是A区
所以都是321
而你中间clear了一把,所以里面就只有一个321了。
依赖于别的类,给人感觉放进去了,但不一定能取出来
每次要put的时候new一个新的就好了呀。你clear干啥