系统相关
首页 > 系统相关> > List中sublist方法内存地址指向问题

List中sublist方法内存地址指向问题

作者:互联网

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截取的数据是指向了被截取集合的内存地址

解决:进行拷贝。若有对象或引用类型则需进行深拷贝,否则可用浅拷贝

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,list,sublist,SubList,JSON,内存地址,tempList
来源: https://blog.csdn.net/qq_36296417/article/details/114011884