>  기사  >  Java  >  이는 다음과 같이 다시 작성할 수 있습니다. Java 배열을 복사하는 방법에는 어떤 것이 있습니까?

이는 다음과 같이 다시 작성할 수 있습니다. Java 배열을 복사하는 방법에는 어떤 것이 있습니까?

王林
王林앞으로
2023-05-09 10:13:081221검색

머리말

소위 배열 복사는 한 배열의 요소를 다른 배열로 복사하는 것을 의미합니다.

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));
    	}
  • 2. copyOf() 메소드를 사용하세요
  • copyOf() 메소드는 배열을 지정된 길이로 복사하는 것입니다

  • Arrays 클래스의 copyOf() 메소드의 구문 형식은 다음과 같습니다.
  • Arrays.copyOf(dataType[] srcArray,int length);

    여기서,

    는 복사 후 새 배열의 길이를 나타냅니다.
이 방법을 사용하여 배열을 복사하는 경우 기본적으로 원본 배열의 첫 번째 요소(인덱스 값은 0)부터 복사가 시작되며 대상 배열의 길이는 length가 됩니다. 길이가 srcArray.length보다 크면 대상 배열이 기본값으로 채워지고, 길이가 srcArray.length보다 작으면 길이 요소(인덱스 값은 길이-1)까지 복사됩니다.

참고: 대상 배열이 이미 존재하는 경우 재구성됩니다.

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는 원본을 나타냅니다. 정렬.

startIndex는 복사를 시작할 시작 인덱스를 나타냅니다. 대상 배열에는 시작 인덱스에 해당하는 요소가 포함됩니다. 또한 startIndex는 0에서 srcArray.length 사이여야 합니다.

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() 메서드를 사용하세요.

  • arraycopy() 메서드는 java.lang.System 클래스에 있으며 구문은 다음과 같습니다.
  • System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length)

    여기서 srcArray는 원본 배열을 나타냅니다. 원본 배열의 시작 인덱스, destArray는 대상 배열의 시작 인덱스를 나타냅니다. length는 복사할 배열의 길이를 나타냅니다.

  • 이 방법을 사용하여 배열을 복사할 때 length+srcIndex는 srcArray.length보다 작거나 같아야 하며, length+destIndex는 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 클래스의 메소드로 별도의 메모리 공간을 갖는 객체를 생성할 수 있다. 배열도 Object 클래스이므로 배열 개체의 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

원본 복사 메소드로 복사한 ans 배열은 [57, 81, 68, 75, 91]

copyOf() 메소드로 복사한 ans 배열은 다음과 같습니다. [57, 81 , 68, 75, 91, 0, 0, 0]
copyOfRange() 메서드로 복사된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제