Java如何拷贝数据?
在 Java 中,数组和集合的深拷贝与浅拷贝的概念与复制对象的引用和内容相关。深拷贝
是创建一个新对象,并递归地复制其所有内容
,而浅拷贝
则只是复制对象的引用
。
数组的深拷贝与浅拷贝:
1. 深拷贝数组:
import java.util.Arrays;public class DeepCopyArrayExample {public static void main(String[] args) {int[] originalArray = {1, 2, 3, 4, 5};// 深拷贝数组int[] deepCopyArray = Arrays.copyOf(originalArray, originalArray.length);// 修改原始数组内容originalArray[0] = 100;// 输出深拷贝数组System.out.println("Original Array: " + Arrays.toString(originalArray));System.out.println("Deep Copy Array: " + Arrays.toString(deepCopyArray));}
}
在上述例子中,Arrays.copyOf()
方法创建了一个新的数组,并复制了原始数组的内容。修改原始数组不会影响深拷贝的数组。
2. 浅拷贝数组:
public class ShallowCopyArrayExample {public static void main(String[] args) {int[] originalArray = {1, 2, 3, 4, 5};// 浅拷贝数组int[] shallowCopyArray = originalArray;// 修改原始数组内容originalArray[0] = 100;// 输出浅拷贝数组System.out.println("Original Array: " + Arrays.toString(originalArray));System.out.println("Shallow Copy Array: " + Arrays.toString(shallowCopyArray));}
}
在浅拷贝中,shallowCopyArray
实际上是引用了原始数组,因此修改原始数组会影响到浅拷贝的数组。
集合的深拷贝与浅拷贝:
在 Java 中,通常使用构造函数或者 clone 方法来实现集合的深拷贝或浅拷贝。
1. 深拷贝集合:
import java.util.ArrayList;
import java.util.List;public class DeepCopyListExample {public static void main(String[] args) {List<Integer> originalList = new ArrayList<>();originalList.add(1);originalList.add(2);originalList.add(3);// 深拷贝集合List<Integer> deepCopyList = new ArrayList<>(originalList);// 修改原始集合内容originalList.set(0, 100);// 输出深拷贝集合System.out.println("Original List: " + originalList);System.out.println("Deep Copy List: " + deepCopyList);}
}
2. 浅拷贝集合:
import java.util.ArrayList;
import java.util.List;public class ShallowCopyListExample {public static void main(String[] args) {List<Integer> originalList = new ArrayList<>();originalList.add(1);originalList.add(2);originalList.add(3);// 浅拷贝集合List<Integer> shallowCopyList = originalList;// 修改原始集合内容originalList.set(0, 100);// 输出浅拷贝集合System.out.println("Original List: " + originalList);System.out.println("Shallow Copy List: " + shallowCopyList);}
}
在集合中,深拷贝通常需要手动创建一个新的集合,并将原始集合中的元素逐个复制到新集合中。而浅拷贝则可以使用构造函数或者 clone
方法来简单地创建一个引用了原始集合的新集合。需要注意的是,如果集合中的元素是可变对象,深拷贝时还需要对元素进行递归的深拷贝。