Java List踩坑记录

本文记录了在使用Java List时遇到的两个常见问题:List中所有元素指向同一内存地址,导致数据错误;以及List中包含null元素,特别是在Mybatis查询后的处理。此外,还简单介绍了List接口、ArrayList、LinkedList和Vector的区别。在处理List时,应避免使用for循环直接删除元素,推荐使用Iterator。
摘要由CSDN通过智能技术生成
踩坑一 List中所有元素指向同一个地址内存

ArrayList中的每一个元素存储的实际上是对象引用(之前在公司写代码的时候,做过类似下面的事),假如按照下面的方式使用ArrayList,则最后list中存储的元素都相同且都是最后一个元素,原因是list中所有的元素都指向同一块内存。

@Test
public void test1(){
   
    List<Person> list = new ArrayList<>(16);
    Person p = new Person();
    for(int i = 0; i < 10; i++){
   
        p.setName("test"+i);
        p.setAge(i);
        list.add(p);
    }
    System.out.println(list);
}

结果所有list中的元素都指向同一个Person实例

[Person{name='test9', age=9},  Person{name='test9', age=9}, ...,Person{name='test9', age=9}, Person{name='test9', age=9}]
踩坑二 List中存储了一个元素null

这个坑出现了两次,一次是使用stream之后collect转为list,但是结果为List[null],另外一次就是使用Mybatis查询数据库返回的结果为List[null];

  1. 使用stream之后collect转为list结果为List[null]
    stream通过流映射出list中为null的值,转为为list,此时就会出现List中有null的值。
    @Test
    public void testStream(){
         
        List<Person> list = Arrays.asList(new Person("cc"), new Person("abc"));
        List<Long> collect = list.stream().map(Person:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值