list值循环添加对象值重复问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了list值循环添加对象值重复问题相关的知识,希望对你有一定的参考价值。

HFCZ record = new HFCZ();
CXJLResponse cxjlResponse = new CXJLResponse();
recordList = new ArrayList<HFCZ>();
for (int i = 0; i < 10; i++)
record.setCZNo("1371234567" + i);// 充值号码
record.setID("1000" + i);// 充值流水号
record.setMoney(50 + i);// 充值金额
record.setDate("2010100" + i);// 充值日期
if (i % 3 == 0)
record.setStatus("未处理");// 流水状态
record.setUsername("iPhone1");// 设置用户名
else if (i % 3 == 1)
record.setStatus("处理中");
record.setUsername("iPhone2");
else
record.setStatus("已处理");
record.setUsername("iPhone3");

recordList.add(record);



像这种呢,循环完了后,recordList里的值全部变成了recordList里的最后一次循环的值,前面的值都覆盖掉了,这是什么原因?

怎么说呢!
你的record在new之后得到了一块内存地址
而你的set只是改变了这个对象的值,而不会为该对象重新分配一块内存
而你的recordList.add(record)
相当于保存了record对象的引用地址
所以只要你改变record对象
list中所有元素(你假想的)就都会改变
解决方法是
将HFCZ record = new HFCZ();放在你的循环内,分配多块内存地址就OK了
参考技术A

list值循环添加对象值重复的原因和解决方法如下:

    record在new之后得到了一块内存地址;

    而你的set只是改变了这个对象的值,却不会为该对象重新分配一块内存;

    你的recordList.add(record)相当于保存了record对象的引用地址;

    所以只要你改变record对象,list中所有元素就都会改变;

    解决方法是将HFCZ record = new HFCZ();这一个放在你的循环内,分配多块内存地址就可以了。

    list:表, 一览表; 明细表; 目录; 名单。 在计算机领域指序列。在编程语言中List 是类库中的一个类,可以简单视之为双向连结串行,以线性列的方式管理物件集合。list 的特色是在集合的任何位置增加或删除元素都很快,但是不支持随机存取。list 是类库提供的众多容器(container)之一,除此之外还有vector、set、map、…等等。list 以模板方式实现(即泛型),可以处理任意型别的变量,包括使用者自定义的资料型态

参考技术B 那是当然了,你的record只是保存临时的值!ArrayList里面号码,流水帐号,金额,日期 这4种数据类型,每一个数据类型就是一个元素 !每次输入信息的时候,就相当于给数组重新赋值!所以结果就是你最后输入的信息!你要保存每一次充值纪录的话,每次都要去声明一个新的数组去保存一条信息。像这种要永久保存信息,是要用到持久化技术,即将文件写到磁盘上,或者用数据库, 参考技术C 忘了登录回答了 郁闷!

以上是关于list值循环添加对象值重复问题的主要内容,如果未能解决你的问题,请参考以下文章

按值传递可变对象

List循环添加对象时遇到问题的解决

如何把List里面的值循环相加

java中list怎么添加元素?

防止在数组中添加重复值

往List集合循环add(对象)得到的是重复对象