我有一个简单的代码,通过“for”迭代器将多个对象存储到 ArrayList 中。
@RequestMapping("dataInsert")
public String dataInsert(String pageNum, Model model) {
Supplier supplier = new Supplier();
List<Supplier> list = new ArrayList<Supplier>();
int number = ss.maxNum(supplier);
for (int i = 0; i < 5; i++) {
supplier.setNum(number + i);
supplier.setName("supplier" + i);
supplier.setDel("n");
supplier.setAddr("address" + i);
list.add(supplier);
System.out.println(i + " : " + supplier);
}
System.out.println(list);
int result = ss.insertList(list, supplier);
model.addAttribute("result", result);
model.addAttribute("pageNum", pageNum);
return "supplier/Insert";
}
下面的控制台输出显示了对象的迭代数量:
0 : Supplier [num=13, name=supplier0, tel=null, addr=address0, del=n]
1 : Supplier [num=14, name=supplier1, tel=null, addr=address1, del=n]
2 : Supplier [num=15, name=supplier2, tel=null, addr=address2, del=n]
3 : Supplier [num=16, name=supplier3, tel=null, addr=address3, del=n]
4 : Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n]
控制台输出来自:
System.out.println(list);
for
之外代表 List
的语句每个对象显示相同的内容。
[Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n]
]
我想要做的是创建一个包含具有不同值的对象的列表。
我猜代码有问题。
我以为add()
ArrayList
中的方法正在将参数值附加到现有列表对象。有谁知道为什么会发生这种情况吗?
最佳答案
您仅在 List
中存储一个 Supplier
对象(您添加同一对象 5 次),并且在循环中不断修改它。
您应该为循环的每次迭代创建一个新实例:
List<Supplier> list = new ArrayList<Supplier>();
int number = ss.maxNum(supplier);
for (int i = 0; i < 5; i++) {
Supplier supplier = new Supplier();
supplier.setNum(number + i);
supplier.setName("supplier" + i);
supplier.setDel("n");
supplier.setAddr("address" + i);
list.add(supplier);
System.out.println(i + " : " + supplier);
}
关于java - 为什么 arrayList 中存储的每个对象的内容具有相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693618/