Java 集合 add 方法重复添加问题

首先需要知道的是,在 add 方法里面,对于引用类型的对象,存放的是引用类型的地址,尤其是当我们使用 new 出来的对象并调用集合中的 add 方法来添时,当改变了该对象的属性,但该对象的地址并没有改变,所以当对象里面的属性改变的时,原本存放在集合里面的内容也会跟着一起改变,并在添加的过程中添加重复的内容放集合中去,避免的方法就是每次添加的时候重新 new 来开辟新的内存空间来保存对象信息,若需要添加多个,则应当在循环里面定义。
举例说明👇

//定义一个老师,赋予值
Teacher teacher = new Teacher("Mike","男");
//存放老师
List<Teacher> teacherList = new ArryList();
teacherList.add(teacher);

这个时候集合里面只有 Mike 老师的信息,接着

//把 teacher 重新赋值添加到集合中
teacher.setName("Marry");
teacher.setSex("女");
teacherList.add(teacher);

这个时候就需要注意了,由于 teacher 对象并没有改变内存中的地址,所以此时集合中存放着的 Mike 的信息就会比变成 Marry 的信息,在调用 add 方法后又会继续添加一个 Marry 老师到集合中去,造成了俩个 Marry 在集合当中。
正确的做法:

//添加时重新 new Teacher 对象
for(int i = 0,i<length;i++){
	Teacher teacher = new Teacher();
	teacher.setName("Marry");
	teacher.setSex("女");
	teacherList.add(teacher);
}

这样不仅每次添加时避免掉了重复问题,也因为是局部变量在循环结束时会回收内存空间,避免了资源的浪费。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值