List中sublist方法内存地址指向问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了List中sublist方法内存地址指向问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1278字,纯文字阅读大概需要2分钟。
内容图文
![List中sublist方法内存地址指向问题](/upload/InfoBanner/zyjiaocheng/928/162a39a26ab844e48dae162799821afc.jpg)
SubList的使用
List接口中有subList(int fromIndex, int toIndex)方法 属于浅拷贝
会对原List产生影响,所以要慎用。
测试用例
public static void main(String[] args) {
List list = new ArrayList();
for(int i = 0; i<10 ;i++){
list.add(i);
}
System.out.println("list->"+list);
List tempList = list.subList(0, 4);
System.out.println("tempList->"+tempList);
tempList.clear();
for(int i = 2; i<5 ;i++){
tempList.add(i);
}
System.out.println("tempList->"+tempList);
System.out.println("list->"+list);
}
list->[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
tempList->[0, 1, 2, 3]
tempList->[2, 3, 4]
list->[2, 3, 4, 4, 5, 6, 7, 8, 9]
SubList在使用中常遇到的问题
- SubList不能被序列化
- 对子SubList的增删导致原List的数据变化
- 对原List的增删会导致子SubList的的操作抛出并发修改异常
- 不能对SubList强制转型为原类型,比如LinkedList或者ArrayList,会抛出类转换异常
SubList截取的数据是指向了被截取集合的内存地址
解决:进行拷贝。若有对象或引用类型则需进行深拷贝,否则可用浅拷贝
JSON.parse(JSON.stringify()) 实现对对象的深拷贝
就是利用JSON.stringify 将对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储
List<Object> list = new ArrayList<>();
List<Object> sublist = list.subList(0, 5);
String arrJson = JSON.toJSONString(sublist);
List<Object> tempList = JSON.parseArray(arrJson,T.class);
或参考
深克隆浅克隆案例
内容总结
以上是互联网集市为您收集整理的List中sublist方法内存地址指向问题全部内容,希望文章能够帮你解决List中sublist方法内存地址指向问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。