List循环添加对象的推荐方式

先看两段代码

代码A
List<User> userList = new ArrayList<>();
User user = null;
for (int i = 0; i < 10; i++) {
    user = new User("username_" + i, "password_" + i);
    userList.add(user);
}
userList.forEach(ui -> {
    System.out.println(ui.getUsername() + "," + ui.getPassword());
});


 

代码B
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    User user = new User("username_" + i, "password_" + i);
    userList.add(user);
}
userList.forEach(ui -> {
    System.out.println(ui.getUsername() + "," + ui.getPassword());
});


  代码A相对于B来讲是更加推荐的方式,因为在代码B中的循环中每次都会创建一个User对象的实例,而代码A从头到尾只持有一个User对象引用,虽然代码A和代码B创建的对象实例数量是一样的,但因为代码A只持有一个User对象的引用,所以每当循环到下一次创建User对象实例的时候,上一个User实例就会失去引用,然后等待java的垃圾自动回收机制来处理。 

 当然现在只是创建了10个对象,所以代码A和代码B的内存占用没有差很多,但是如果数据量达到一定程度的话,代码B和代码A的内存占用的差距就会显现出来。(不知道以前我为毛一直用代码B的方式,吐血…) 

  另外还有一个要注意的是如果你使用java8的stream的话,可能只能使用代码B的方式(我就经常使用),大家可以自己实验一下。

我们回去看上面代码B的代码:我们new了一个User对象,就只是new了一个唯一的ID,我们将对象放入list时,list就只是添加了一个对象的引用而已,而我们只是简单的set对象进行对对象的值的改变,但是其ID还是唯一的,list又只是对于对象唯一ID的引用。所以结果就显而易见的,。只有最后一个对象添加进List集合

要改正这个代码,只需在循环中不断new一个User对象就可以了,使其ID不唯一。
--------------------- 
作者:星梦心 
来源:CSDN 
原文:https://blog.csdn.net/qqq824908000/article/details/77019502 
版权声明:本文为博主原创文章,转载请附上博文链接!

--------------------- 
作者:萧逸才 
来源:CSDN 
原文:https://blog.csdn.net/xyc_csdn/article/details/72453309 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值