소위 배열 복사는 한 배열의 요소를 다른 배열로 복사하는 것을 의미합니다.
Java에서 배열 복사를 구현하는 방법에는 다음 4가지가 있습니다.
원래 할당 방법
Arrays Arrays 클래스의 copyOf() 메서드, Arrays 클래스의 copyOfRange() 메서드, System 클래스의 arraycopy() 메서드, Object 클래스의 clone() 메서드,
1. 원래 할당 방법
public static void method01(int[] arr, int[] ans) { for (int i = 0; i < arr.length; i++) { ans[i] = arr[i]; } System.out.println("复制的ans数组为 " + Arrays.toString(ans)); }
copyOf() 메소드는 배열을 지정된 길이로 복사하는 것입니다
Arrays.copyOf(dataType[] srcArray,int length);
여기서,
는 복사 후 새 배열의 길이를 나타냅니다.public static void method02(int[] arr, int[] ans) { ans = Arrays.copyOf(arr, arr.length + 3); System.out.println("复制的ans数组为 " + Arrays.toString(ans)); }3. CopyOfRange() 메서드를 사용하세요. Arrays 클래스의 CopyOfRange() 메서드는 배열을 복사하는 또 다른 메서드입니다.
Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex)
srcArray
表示要进行复制的数组,length
여기서:
srcArray는 원본을 나타냅니다. 정렬.
endIndex는 끝 인덱스를 나타냅니다. endIndex는 startIndex보다 크거나 같아야 하며 srcArray보다 클 수 있습니다. 길이에 따라 대상 배열은 기본값으로 채워집니다.
public static void method03(int[] arr, int[] ans) { ans = Arrays.copyOfRange(arr, 0, arr.length + 3); System.out.println("复制的ans数组为 " + Arrays.toString(ans)); }
4. arraycopy() 메서드를 사용하세요.
System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length)
여기서 srcArray는 원본 배열을 나타냅니다. 원본 배열의 시작 인덱스, destArray는 대상 배열의 시작 인덱스를 나타냅니다. length는 복사할 배열의 길이를 나타냅니다.
참고: 대상 배열은 이미 존재해야 하며 재구성되지 않습니다. 이는 대상 배열의 일부 요소를 바꾸는 것과 같습니다. public static void method03(int[] arr, int[] ans) {
ans = Arrays.copyOfRange(arr, 0, arr.length + 3);
System.out.println("复制的ans数组为 " + Arrays.toString(ans));
}
5. clone() 메서드를 사용하세요
clone() 메서드의 반환 값은 Object 유형이므로 적절한 유형으로 캐스팅해야 합니다. 문법 형식은 비교적 간단합니다.
array_name.clone()
public static void method05(int[] arr, int[] ans) { ans = arr.clone(); System.out.println("复制的ans数组为 " + Arrays.toString(ans)); }참고: 위의 방법은 모두 얕은 복사본입니다. 얕은 복사는 객체의 참조 주소만 복사하므로 두 객체가 동일한 메모리 주소를 가리키므로 값이 수정되면 다른 값도 그에 따라 변경됩니다. Deep Copy는 개체와 값을 복사합니다. 두 개체의 값 중 하나라도 수정되면 다른 값은 변경되지 않습니다. 완전한 테스트 케이스
package com.zhuang; import java.util.Arrays; /** * * @ClassName: ArrayCopy * @Description:测试数组复制的几种方法 * @author: KangXiaoZhuang * @date: 2022年10月8日 下午2:19:06 */ public class ArrayCopy { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = new int[] { 57, 81, 68, 75, 91 }; int[] ans = new int[arr.length]; method01(arr, ans); method02(arr, ans); method03(arr, ans); method04(arr, ans); method05(arr, ans); } /** * * @Title: method01 * @Description: 原始复制方法 * @author: KangXiaoZhuang * @param: @param arr 原始数组 * @param: @param ans 目标数组 * @return: void * @throws */ public static void method01(int[] arr, int[] ans) { for (int i = 0; i < arr.length; i++) { ans[i] = arr[i]; } System.out.println("原始复制方法复制的ans数组为 " + Arrays.toString(ans)); } /** * * @Title: method02 * @Description: copyOf()方法 * @author: KangXiaoZhuang * @param: @param arr 原始数组 * @param: @param ans 目标数组 * @return: void * @throws */ public static void method02(int[] arr, int[] ans) { ans = Arrays.copyOf(arr, arr.length + 3); System.out.println("copyOf()方法复制的ans数组为 " + Arrays.toString(ans)); } /** * * @Title: method03 * @Description: copyOfRange()方法 * @author: KangXiaoZhuang * @param: @param arr 原始数组 * @param: @param ans 目标数组 * @return: void * @throws */ public static void method03(int[] arr, int[] ans) { ans = Arrays.copyOfRange(arr, 0, arr.length + 3); System.out.println("copyOfRange()方法复制的ans数组为 " + Arrays.toString(ans)); } /** * * @Title: method04 * @Description: arraycopy()方法 * @author: KangXiaoZhuang * @param: @param arr 原始数组 * @param: @param ans 目标数组 * @return: void * @throws */ public static void method04(int[] arr, int[] ans) { System.arraycopy(arr, 0, ans, 0, 5); System.out.println("arraycopy()方法复制的ans数组为 " + Arrays.toString(ans)); } /** * * @Title: method05 * @Description: 使用clone()方法 * @author: KangXiaoZhuang * @param: @param arr * @param: @param ans * @return: void * @throws */ public static void method05(int[] arr, int[] ans) { ans = arr.clone(); System.out.println("clone()方法复制的ans数组为 " + Arrays.toString(ans)); } }Output
copyOfRange() 메서드로 복사된 ans 배열은 [57, 81, 68, 75, 91, 0, 0, 0]원본 복사 메소드로 복사한 ans 배열은 [57, 81, 68, 75, 91]
copyOf() 메소드로 복사한 ans 배열은 다음과 같습니다. [57, 81 , 68, 75, 91, 0, 0, 0]
ans 배열입니다. arraycopy() 메서드로 복사한 배열은 [57, 81, 68, 75, 91]clone() 메서드로 복사한 ans 배열은 [57, 81, 68, 75, 91]
위 내용은 이는 다음과 같이 다시 작성할 수 있습니다. Java 배열을 복사하는 방법에는 어떤 것이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!