Java/배열

[Java]배열 첫 번째 요소 제거하는 방법

DevStory 2022. 9. 1.

배열 첫 번째 요소 제거하는 방법

Java의 배열에서 첫 번째 요소를 제거해야 하는 상황이 발생할 수 있습니다. 하지만, 배열은 선언과 동시에 고정된 크기를 가지므로 Java에서 첫 번째 요소를 제거할 수 있는 기능을 제공하지 않습니다.

 

그러나, 첫 번째 요소가 제거된 새로운 배열을 생성하는 것은 가능합니다.

 

이번 포스팅은 Java의 배열에서 첫 번째 요소를 제거할 수 있는 몇 가지 방법을 소개합니다.


방법 1. System 클래스의 arraycopy 메서드

첫 번째 방법으로 System 클래스에서 제공하는 arraycopy() 메서드를 사용하여 원본 배열의 특정 위치부터 특정 개수의 요소를 새로운 배열에 추가합니다.

public static native void arraycopy(
  Object src,  int srcPos,
  Object dest, int destPos,
  int length);

Object src

- 복사하고자 하는 소스로 원본 배열입니다.

 

int srcPos

- 복사하고자 하는 소스(Object src)에서 데이터를 읽을 시작 위치입니다.

 

Object dest

- 원본 배열에서 복사한 데이터를 할당하려는 배열입니다.

- 즉, 새로운 배열입니다.

 

int destPos

- 새로운 배열(Object dest)의 시작 위치입니다.

- 0으로 설정하는 경우 복사한 데이터가 새로운 배열의 인덱스 0부터 할당됩니다.

- 3으로 설정하는 경우 복사한 데이터가 새로운 배열의 인덱스 3부터 할당됩니다.

 

int length

- 원본 배열에서 복사되는 데이터 개수입니다.

 

새로운 배열의 크기를 (원본 배열의 길이 - 1)로 설정 후 arraycopy() 메서드를 사용하여 원본 배열의 1번째 인덱스부터 마지막 인덱스까지 해당하는 요소를 새로운 배열의 0번째 인덱스부터 할당합니다.

 

다음 예제는 int 타입의 배열에서 첫 번째 요소가 제거된 새로운 배열을 생성합니다.

public static void main(String args[]) {
  int[] intArray = {0, 10, 20, 30, 40, 50, 60, 70};
  int[] newArray = new int[intArray.length - 1];

  System.arraycopy(intArray, 1, newArray, 0, intArray.length - 1);

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

[실행 결과]

[10, 20, 30, 40, 50, 60, 70]

방법 2. Arrays 클래스의 copyOfRange 메서드

두 번째 방법으로 Arrays 클래스에서 제공하는 copyOfRange() 메서드를 사용하여 첫 번째 요소가 제거된 새로운 배열을 생성할 수 있습니다.

 

copyOfRange() 메서드는 원본 배열의 특정 위치부터 특정 개수의 요소를 가지는 새로운 배열을 반환합니다.

 

첫 번째 매개변수에 원본 배열을 전달하고 두 번째 매개변수에 특정 위치, 세 번째 매개변수에 마지막 위치를 전달합니다.

 

첫 번째 요소가 제거된 새로운 배열을 생성해야 하므로 두 번째 매개변수에 1을 전달하고 세 번째 매개변수에 원본 배열의 길이를 전달합니다.

public static void main(String args[]) {
  int[] intArray = {0, 10, 20, 30, 40, 50, 60, 70};
  int[] newArray = Arrays.copyOfRange(intArray, 1, intArray.length);

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

[실행 결과]

[10, 20, 30, 40, 50, 60, 70]

방법 3. Stream API

마지막 방법으로 Java 1.8 버전 이상인 경우 Stream API를 사용하여 첫 번째 요소가 제거된 새로운 배열을 생성할 수 있습니다.

 

IntStream 클래스의 range() 메서드를 사용하여 새로운 배열의 크기를 설정 후 map() 메서드를 호출하여 원본 배열의 값을 새로운 배열에 할당합니다.

public static void main(String args[]) {
  int[] intArray = {0, 10, 20, 30, 40, 50, 60, 70};
  int[] newArray = IntStream.range(0, intArray.length - 1)
                            .map(i -> intArray[i + 1])
                            .toArray();

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

 [실행 결과]

[10, 20, 30, 40, 50, 60, 70]
반응형

댓글