Java 为什么我的名单错了?
我得到了一些奇怪的结果,无法解释。 你知道为什么我会Java 为什么我的名单错了?,java,list,hashmap,system.out,Java,List,Hashmap,System.out,我得到了一些奇怪的结果,无法解释。 你知道为什么我会 > {Level=1 - Normal, Name=IT/Java} > {Level=2 - Medium, Name=IT/Ruby} > [{Level=2 - Medium, Name=IT/Ruby}, {Level=2 - Medium, Name=IT/Ruby}] 来自系统? 应该是什么时候 > {Level=1 - Normal, Name=IT/Java} > {Level=2 - Me
> {Level=1 - Normal, Name=IT/Java}
> {Level=2 - Medium, Name=IT/Ruby}
> [{Level=2 - Medium, Name=IT/Ruby}, {Level=2 - Medium, Name=IT/Ruby}]
来自系统?
应该是什么时候
> {Level=1 - Normal, Name=IT/Java}
> {Level=2 - Medium, Name=IT/Ruby}
> [{Level=1 - Normal, Name=IT/Java}, {Level=2 - Medium, Name=IT/Ruby}]
这是我的密码
public List<Map<String, Object>> getMapsforTables() {
levelList = this.getSkilllevel();
description = this.getSkillnames();
Map<String, Object> rm = new HashMap<String, Object>();
List<Map<String, Object>> l = new LinkedList<Map<String, Object>>();
for(int i=0; i < levelList.size(); i++){
rm.clear();
rm.put("Name", description.get(i));
rm.put("Level", levelList.get(i));
System.out.println(rm);
l.add(rm);
}
System.out.println(l);
return l;
}
public List getMapsforTables(){
levelList=this.getSkilllevel();
description=this.getSkillnames();
Map rm=newhashmap();
列表l=新的LinkedList();
对于(int i=0;i
因为在每次迭代中,您都在修改相同的对象并将其添加到列表中。你可以做:
for(int i = 0; i < levelList.size(); i++){
Map<String, Object> rm = new HashMap<String, Object>();
rm.put("Name", description.get(i));
rm.put("Level", levelList.get(i));
System.out.println(rm);
l.add(rm);
}
for(int i=0;i
当您将元素添加到列表中时,会发生以下情况:
l.add(rm);
您正在添加对对象的引用
在下一次迭代中,您将修改rm
引用的对象,然后再次添加它。因此,您添加了两次相同的引用
你能做什么?
一个简单的解决方案是在循环内声明rm
:
for(int i=0; i < levelList.size(); i++){
Map<String, Object> rm = new HashMap<String, Object>();
...
}
for(int i=0;i
短版本是因为您反复使用同一个贴图
对象
移动Map rm=newhashmap()代码>行在for
循环中,作为第一条语句,您的问题应该消失
从长远来看,您应该看一些关于按引用传递和按值传递之间区别的通用CS或java教程。请了解对象和引用是什么-您不断更改一个对象,同时已经将其放置在另一个对象中,并怀疑之后会有什么变化。