Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 배열을 복사하는 4가지 방법

Java에서 배열로 작업할 때 배열의 복사본을 생성하기로 결정할 수 있습니다. 예를 들어, 커피숍을 운영 중이고 계절 메뉴를 만들려는 경우 새 메뉴의 기반이 될 수 있는 원본 메뉴의 복사본을 만들 수 있습니다.

Java에는 배열을 복사할 수 있는 여러 가지 방법이 있습니다. 이 자습서에서는 배열을 복사하는 4가지 일반적인 방법을 살펴보고 배열이 한 줄씩 작동하는 방식에 대해 설명합니다. 이 튜토리얼을 읽고 나면 Java에서 배열 복사의 마스터가 될 것입니다.

자바 배열

Java에서 배열은 하나의 단일 유형을 보유하는 값을 보유하는 컨테이너입니다. 예를 들어, 배열을 사용하여 책 목록이나 플레이어가 다트 게임에서 얻은 점수 목록을 저장할 수 있습니다.

배열은 하나의 컬렉션에 모두 저장할 수 있기 때문에 많은 유사한 값으로 작업하려는 경우에 유용합니다. 이를 통해 코드를 압축하고 한 번에 유사한 값에 대해 동일한 메서드를 실행할 수 있습니다.

커피숍에서 판매되는 커피를 저장하는 배열을 생성한다고 가정합니다. 다음 코드를 사용하여 그렇게 할 수 있습니다.

String[] coffees = {“Espresso”, “Mocha”, “Latte”, “Cappuccino”, “Pour Over”, “Flat White”};

이 예에서는 coffees라는 배열을 선언합니다. String 값을 저장합니다. 배열에는 6개의 값이 있습니다.

배열의 각 항목에는 0부터 시작하는 인덱스 번호가 할당되며, 이는 배열의 항목을 개별적으로 참조하는 데 사용할 수 있습니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

이제 Java 배열의 기본 사항을 살펴보았으므로 배열의 내용을 복사하는 데 사용할 수 있는 방법에 대해 논의할 수 있습니다.

할당 연산자를 사용하여 배열 복사

배열을 복사하는 데 사용되는 가장 일반적인 복제 방법 중 하나는 할당 연산자를 사용하는 것입니다.

할당 연산자는 배열에 값을 할당하는 데 사용됩니다. 할당 연산자를 사용하여 기존 배열의 내용을 새 변수에 할당할 수 있습니다. 그러면 기존 배열의 복사본이 생성됩니다.

다시 커피숍으로 돌아가자. coffees의 복사본을 만들고 싶다고 가정해 보겠습니다. 여름 커피 메뉴의 기반이 될 배열입니다. 이 코드를 사용하여 배열의 복사본을 만들 수 있습니다.

class CopyAssignment {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
		String[] summer_coffees = coffees;

		for (String c: summer_coffees) {
			System.out.print(c + ",");
		}
	}
}

코드는 다음을 반환합니다.

Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White,

코드를 분해해 보겠습니다. CopyAssignment 클래스 내부의 첫 번째 코드 줄에서 coffees라는 배열을 선언합니다. 표준 커피 메뉴를 저장합니다.

다음 줄에서 할당 연산자를 사용하여 coffees 값을 할당합니다. summer_coffees라는 새 배열로 . 그런 다음 summer_coffees의 모든 항목을 반복하는 "for-each" 루프를 만듭니다. 배열하고 콘솔에 출력합니다.

이 방법을 사용할 때 한 가지 단점이 있습니다. 한 배열의 요소를 변경하면 다른 배열도 변경됩니다. 따라서 Latte의 값을 변경하면 Summer Lattesummer_coffees에서 목록, 우리의 coffees 목록도 변경됩니다.

배열 복사를 위한 루프

할당 연산자를 사용하여 배열을 복사하기 위해 논의한 첫 번째 접근 방식은 shallow copy.라는 것을 생성합니다. 이는 기존 배열 객체를 새 객체에 할당했기 때문입니다. 즉, 객체를 변경하면 둘 다 변경됩니다. 즉, 두 객체가 연결됩니다.

그러나 종종 깊은 복사본을 만들어야 합니다. 전체 복사는 기존 개체에서 값을 복사하고 새 배열 개체를 만듭니다. 전체 복사본을 만들 때 원본 배열에 영향을 주지 않고 새 배열을 변경할 수 있습니다.

깊은 복사본을 만드는 데 사용할 수 있는 한 가지 접근 방식은 for를 만드는 것입니다. 배열의 내용을 반복하고 새 배열을 만드는 루프.

coffees의 전체 복사본을 만들고 싶다고 가정해 보겠습니다. summer_coffees.라는 배열 summer_coffees의 콘텐츠를 변경할 계획이므로 이 내용을 자세히 복사해야 합니다. 여름에 제공할 새로운 커피를 반영하는 배열입니다.

다음은 for를 사용하여 깊은 사본을 만드는 데 사용할 코드입니다. 고리:

import java.util.Arrays;

class LoopCopy {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
		String[] summer_coffees = new String[6];

		for (int i = 0; i < coffees.length; ++i) {
			summer_coffees[i] = coffees[i];
		}

		System.out.println(Arrays.toString(summer_coffees));
	}
}

코드를 실행하면 출력은 다음과 같습니다.

[Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

보시다시피, 우리 코드는 원래 배열의 복사본을 생성했습니다. 작동 방식을 단계별로 설명하겠습니다.

  1. java.util.Arrays를 가져옵니다. toString() 메서드가 포함되어 있으므로 예제의 끝에서 콘솔에 배열을 인쇄하는 데 사용할 것입니다.
  1. coffees라는 배열을 선언합니다. 표준 메뉴에 있는 커피 목록을 저장합니다.
  2. summer_coffees라는 배열을 초기화합니다. 6개의 값을 저장합니다.
  3. for 루프를 사용하여 coffees의 모든 항목을 반복합니다. 목록.
  4. for 루프가 실행될 때마다 인덱스 값 i에 있는 항목 여름에 커피는 인덱스 값 i의 항목에 할당됩니다. 커피에.
  5. Arrays.toString()을 사용하여 summer_coffees를 변환합니다. 문자열로 변환한 다음 복사한 요소가 있는 새 배열을 콘솔에 출력합니다.

copyOfRange() 자바 메소드 사용

Java copyOfRange() 메서드는 Arrays.copyOfRange()를 복사하는 데 사용되며 java.util.Arrays 클래스의 일부입니다. 다음은 copyOfRange() 메서드의 구문입니다.

import java.util.arrays;

DataType[] newArray = Arrays.copyOfRange(oldArray, indexPos, length);

copyOfRange() 메서드의 구문을 분석해 보겠습니다.

  1. 데이터 유형 새 배열이 저장할 데이터 유형입니다.
  2. newArray 새 배열의 이름입니다.
  3. oldArray newArray에 복사하려는 값의 배열입니다. .
  4. 인덱스 위치 oldArray에서 복사 작업이 시작되어야 하는 위치입니다. .
  5. 길이 oldArray에서 복사해야 하는 값의 수입니다. newArray로 .

작동 중인 copyOfRange() 메서드를 보여주는 예제를 살펴보겠습니다. coffees 사본을 만들고 싶다고 가정해 보겠습니다. 이전의 배열. 다음 코드를 사용하여 그렇게 할 수 있습니다.

import java.util.Arrays;

class CopyUsingRange {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};

		String[] summer_coffees = Arrays.copyOfRange(coffees, 0, coffees.length);
		System.out.println("Summer coffees: " + Arrays.toString(summer_coffees));
	}
}

코드는 다음을 반환합니다.

Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

코드를 분석해 보겠습니다.

  1. java.util.Arrays를 가져옵니다. 이 예제에서 사용할 copyOfRange() 및 toString() 메서드를 저장하는 라이브러리입니다.
  2. coffees라는 배열을 선언합니다. 표준 메뉴에 커피를 저장합니다.
  3. summer_coffees라는 배열을 선언합니다. copyOfRange() 메서드를 사용하여 coffees 사본을 만듭니다. 정렬. 우리가 지정하는 매개변수는 다음과 같습니다.
    1. 커피 복사하려는 배열의 이름입니다.
    2. coffees에서 인덱스 위치 0에서 시작하는 값을 복사하도록 지정합니다. 배열.
    3. 커피 길이 목록의 모든 값을 복사하도록 지정합니다.
  4. "Summer coffee:" 다음에 summer_coffees라는 결과 배열을 출력합니다. 콘솔로.

이제 "coffees summer_coffees라는 목록 .

arraycopy() 자바 메소드 사용

arraycopy() 메서드는 한 배열에서 다른 배열로 데이터를 복사하는 데 사용됩니다. arraycopy() 메서드는 System 클래스의 일부이며 기존 배열의 복사본을 사용자 지정할 수 있는 여러 옵션을 포함합니다.

다음은 arraycopy() 메서드의 구문입니다.

System.arraycopy(sourceArray, startingPos, newArray, newArrayStartingPos, length);

이 방법을 분해해 보겠습니다. copyarray()는 5개의 매개변수를 허용합니다.

  • 소스배열 복사하려는 배열의 이름입니다.
  • 시작 위치 source_array에서 값 복사를 시작하려는 인덱스 위치입니다. .
  • newArray 값이 복사될 새 배열의 이름입니다.
  • newArrayStartingPos 복사된 값이 추가되어야 하는 인덱스 위치입니다.
  • 길이 new_array에 복사하려는 요소의 수입니다. .

다시 커피숍으로 돌아가자. coffees의 모든 값을 복사하고 싶다고 가정해 보겠습니다. summer_coffees라는 새 배열에 대한 배열 . 다음 코드를 사용하여 그렇게 할 수 있습니다.

import java.util.Arrays;

class ArrayCopyMethod {
	public static void main(String[] args) {
		String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
		String[] summer_coffees = new String[6];

		System.arraycopy(coffees, 0, summer_coffees, 0, coffees.length);
		System.out.println("Summer coffees: " + Arrays.toString(summer_coffees));
	}
}

코드는 다음을 반환합니다.

Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

코드를 단계별로 분석해 보겠습니다.

  1. java.util.Arrays를 가져옵니다. 프로그램 시작 시 패키지. 여기에는 프로그램 끝에서 생성한 배열 복사본을 인쇄하는 데 사용할 toString() 메서드가 포함됩니다.
  2. coffees라는 배열을 선언합니다. 표준 메뉴에 커피를 저장합니다.
  3. summer_coffees라는 배열을 초기화합니다. 6개의 값을 보유합니다.
  4. arraycopy()를 사용하여 coffees 사본을 만듭니다. 정렬. 다음은 지정하는 매개변수입니다.
    1. 커피 복사하려는 배열입니다.
    2. coffees에서 복사를 시작하려는 위치입니다. 배열.
    3. 여름_커피 복사한 값을 추가할 배열입니다.
    4. 복사된 값이 summer_coffees에 추가되기 시작하려는 위치입니다. 배열.
    5. 커피 길이 복사하려는 배열 요소의 수입니다. 이 경우 coffees.length를 사용합니다. coffees의 모든 요소를 ​​복사할 수 있습니다. 목록.
  5. "여름 커피:"라는 메시지를 인쇄한 다음 우리가 만든 여름 커피 목록을 인쇄합니다.

결론

배열 복사는 목록으로 작업할 때 일반적인 작업입니다. 이 자습서에서는 Java에서 배열을 복사할 수 있는 네 가지 방법을 살펴보았습니다.

먼저 할당 연산자를 사용하여 얕은 복사본을 만드는 방법을 논의한 다음 for를 사용하여 깊은 복사본을 만드는 방법을 설명했습니다. 고리. 그런 다음 copyOfRange() 메서드를 사용하여 배열 복사본을 만드는 방법과 arraycopy() 시스템 메서드를 사용하여 배열을 복사하는 방법을 살펴보았습니다.

이제 전문가처럼 Java로 배열 복사를 시작할 준비가 되었습니다!