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

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

被折叠的 条评论
为什么被折叠?



