Java list 使用的过程中出现的问题

在Java开发中,使用List时遇到数据修改后丢失的问题,原因是浅拷贝导致。System.arraycopy和Arrays.copyOf虽然常用于拷贝,但实际上是浅拷贝。为解决此问题,需要通过新建对象分配新内存地址实现深拷贝,如使用Map转换。总结来说,为避免影响原始数组,修改List时最好创建新List,若仅用一次原始数据,可不收集以节省内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

list的使用-----深拷贝

1、问题

一次开发中,使用list的时候,对list的内容进行改变时,出现数据丢失的问题,最后排查数据找到问题的原因,是因为使用list的是浅拷贝,值引用。

2、产生的原因

List<Question> questionList = new ArrayList<>();
Question question1 = new Question();
question1.setQuestionBody("111111111");
questionList.add(question1);
List<Question> questionList= questionList.stream().filter(item -> item.getId().equals(0)).collect(Collectors.toList());

System.arraycopy

使用 arrayList.addAll(); 进行数组的生成,结果还是浅拷贝,因为其使用的是System.arraycopy
源码如下:

    public boolean addAll(Collection
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值