数组、链表数组、对象的深浅拷贝思考
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改变而改变