数组、链表数组、对象的深浅拷贝思考

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
       
        FakeNode[] fa=new FakeNode[2];
        FakeNode fakeNode1 = new FakeNode("1号");
        FakeNode fakeNode2 = new FakeNode("2号");
        FakeNode fakeNode3 = new FakeNode("3号");
        FakeNode fakeNodeTemp;
        fa[1]=fakeNode1;
        fakeNode1.next=fakeNode2;
        fakeNodeTemp=fa[1];
        System.out.println(fa[1].next);
        fakeNodeTemp.next.next=fakeNode3;
        System.out.println(fa[1].next.next);
        // *********************深复制操作**************************
        // FakeNode[] fa3= Arrays.copyOf(fa,fa.length);
	// *********************深复制操作**************************
        FakeNode[] fa2=fa;
        fa2[0]=fakeNode3;
        fa2[1]=fakeNode3;
        FakeNode[] fa3= Arrays.copyOf(fa,fa.length);
        fa3[1]=fakeNode2;
        System.out.println(fa[0]);
        System.out.println(fa[1]);


        // 数组复制是浅复制,只复制内存地址,修改复制表,原表也会跟着改变
        System.out.println("================================================================================================");

        FakeNode a = new FakeNode("1号");
        System.out.println(a);
        FakeNode c = new FakeNode("3号");
        FakeNode b=a;
        b.name="2号";
        System.out.println(a);
        System.out.println(b);
        // 对象也是浅复制
        System.out.println("================================================================================================");



        // 原数组数据改变,复制数组也跟着改变
        // 原数组赋值给其他数组,复制数组不变,复制数组依旧指向原数组赋值前的地址
        int[] arr={1,2};
        int[] brr=arr;
        brr[1]=3;
        arr[1]=4;
        int[] crr = new int[3];
        arr=crr;
        for(int i:arr){
            System.out.println("arr="+i);
        }

        for(int i:brr){
            System.out.println("brr="+i);
        }

        System.out.println("================================================================================================");

        // 原数组数据改变,复制数组也跟着改变
        // 复制数组赋值给其他数组,原数组不变
        int[] arr2={1,2};
        int[] brr2=arr2;
        int[] crr2 = {222,222};
        brr2=crr2;
        for(int i:arr2){
            System.out.println("arr2="+i);
        }

        for(int i:brr2){
            System.out.println("brr2="+i);
        }


    }
}

class FakeNode{
    public String name;
    public FakeNode next;

    public FakeNode(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "FakeNode{" +
                "name='" + name + '\'' +
                ", next=" + next +
                '}';
    }
}

 
 

力扣算法题思考new ArrayList的作用

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class hashmaptest {

    public static void main(String[] args) {


        LinkedList<Integer> integers = new LinkedList<>();
        List <List<Integer>> larr1 = new LinkedList<List<Integer>>(),
                larr2=new LinkedList<List<Integer>>();
        larr1.add(integers);
        larr2.add(new ArrayList<>(integers));
        integers.add(5);
        System.out.println("larr1="+larr1);
        System.out.println("larr2="+larr2);
    }
}

运行后发现使用了new ArrayList的list,会随着被add的list改变而改变

posted @ 2021-06-02 14:36    阅读(50)  评论(0编辑  收藏  举报