所有list都是同一条数据

本文详细解释了在向List中添加对象时遇到的所有对象变为最后一个对象的问题原因,并提供了正确的对象初始化时机来解决这一问题。

问题描述:向List中添加对象,打印出来后发现所有对象均为最后一次添加的对象。

问题原因:

例:假如进行初始化时其引用地址为A。

若其在外层进行初始化,虽然for循环了三次,但是对象只在最初初始化了一次,其地址一直为A不变。

那么,第一次循环,存入的值A{0, user0,   address0},  list[0]存入的为地址A。

第二次循环,由于对象未再次初始化,此时A中的值被{1, user1,  address1}覆盖。 list[1]存入的地址为A。

第三次循环同上。 

循环结束后,list中三次存入的地址均为A, 而此时A对应的值为{2, user2,address2}。故打印list中的值时,三次的结果均为最后一次付给对象的值。

所以,为了保证上述问题不出现,只需要将对象初始化的时机放在每次for循环开始时,即循环内。这样就能保证,每个对象的引用都是不同的,也就保证了list中存入的对象的引用的唯一。

Java中,`List`集合是一种有序的集合,可以通过索引访问其中的元素。要获取`List`集合的最后一数据,可以使用以下几种方法: 1. **使用`size()`方法**: `size()`方法返回`List`集合中元素的个数。因此,最后一个元素的索引是`size() - 1`。 ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); if (!list.isEmpty()) { String lastElement = list.get(list.size() - 1); System.out.println("最后一数据是: " + lastElement); } else { System.out.println("列表为空"); } } } ``` 2. **使用Java 8的`stream()`方法**: 可以使用`stream()`方法结合`reduce`操作来获取最后一个元素。 ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); list.stream().reduce((first, second) -> second).ifPresent(lastElement -> System.out.println("最后一数据是: " + lastElement)); } } ``` 3. **使用`ListIterator`类**: 可以使用`ListIterator`类从列表末尾向前遍历,获取最后一个元素。 ```java import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); ListIterator<String> listIterator = list.listIterator(list.size()); if (listIterator.hasPrevious()) { String lastElement = listIterator.previous(); System.out.println("最后一数据是: " + lastElement); } } } ``` 这些方法都可以帮助你在`List`集合中获取最后一数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值