是的 list中存放的都是指向同一个map就想你说的必须在循环内new一个新的map再add
解决方案 »
- java的文档官网上有离线下载吗?api文档有,其他的好像没找到?
- 一个keyListener问题
- 新手求助.LRStruct的问题
- jbuilder中编译一个带命令行参数的程序。但命令行要在哪里输入呀
- 关于java中的泛型?
- 怎样用jbuilder2005将一个.class文件做成.exe的文件??
- 找高手请教ResultSet的rs对象该在何处rs.close()
- 如何判断一个其间包含了哪几个月?
- ****8888为了金钱,偶转投JAVA阵营,从此地球上消失了一个VC高手.(一个豪情万丈的老鸟之言)
- 诚心 请教~~ 希望高手给一些建议
- 面向对象之后怎么学
- 求问大家都用的什么java反编译的工具啊 ~~~?
是覆盖了,但是我在覆盖之前已经add到list里了。说明list是存放指向map的引用的。
2、第一次添加map的值为("key1","0"),第二次添加("key1","1"),由于key相同覆盖了"0"为"1",所以map最后的值为("key1","1"),list最后为[("key1","1"),("key1","1")]
您纠结的问题是为何list里是[{key1=1}, {key1=1}]
首先,Map接口里的key值是不允许重复的;其次,list中允许对象重复。再次,for循环了2次
下边把for循环拆分开来详细看。
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
Map<String,String> m =new HashMap<String,String>();m.put("k",String.valueOf(0));
list.add(m);
System.out.println(list.toString()+"-----"+list.size());
System.out.println( m.get("k"));
/////============================================
m.put("k",String.valueOf(1));
list.add(m);
System.out.println(list.toString()+"-----"+list.size());
System.out.println( m.get("k"));
结果[{k=0}]-----1
0
[{k=1}, {k=1}]-----2
1
Map<String,String> m;
for(int i =0;i<2;i++){
m =new HashMap<String,String>();
m.put("key1", String.valueOf(i));
list.add(m);
}
Map<String,String> m =new HashMap<String,String>();
for(int i =0;i<2;i++){
m.put("key"+i, String.valueOf(i));
}
list.add(m);
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
for(int i =0;i<2;i++){
Map<String,String> m =new HashMap<String,String>();
m.put("key1", String.valueOf(i));
list.add(m);
}
[{key0=0, key1=1}]
应该按照10楼和12楼的做法得到
[{key1=0}, {key1=1}]
用AbstractMap.SimpleEntry就好了。
List都只存长度为1的map有点浪费,遍历也不方便吧。
Map.Entry<String, String> entry = new AbstractMap.SimpleEntry <String, String>("key1", "value1");