Java/배열

[Java]배열 특정 인덱스의 요소를 제거하는 방법

DevStory 2022. 8. 22.

배열 특정 인덱스의 요소를 제거하는 방법

Java에서 배열은 크기가 고정이므로 특정 인덱스의 요소를 제거하는 메서드를 제공하지 않습니다.

 

이번 포스팅은 배열이 아닌 다양한 클래스에서 제공하는 메서드를 사용하여 특정 인덱스의 요소를 제거하는 몇 가지 방법을 소개합니다. 


방법 1. Stream API

Java의 버전이 1.8 이상인 경우 Stream API를 사용할 수 있습니다.

 

Stream API를 사용하여 특정 인덱스의 요소가 제거된 새로운 배열을 반환합니다.

 

[제거 방법]

순서 1. IntStream의 range() 메서드를 사용하여 0부터 원본 배열의 길이만큼 값을 생성합니다. 

순서 2. range() 메서드 반환 결과에서 filter() 메서드를 호출합니다. 특정 인덱스가 아닌 값을 반환하도록 합니다.

순서 3. map() 함수 또는 mapToObj() 메서드를 호출하여 특정 인덱스의 요소가 제외된 원본 배열의 요소를 할당합니다.

순서 4. toArray() 메서드를 호출하여 스트림 결과를 배열로 변환합니다.

 

다음 예제는 String 타입의 배열에서 2번째 인덱스 요소가 제거된 새로운 배열을 반환합니다.

public static void main(String args[]) {
  String[] strArray = { "10", "20", "30", "40", "50", "60", "70" };

  System.out.println("2번째 인덱스의 요소 삭제 전: " + Arrays.toString(strArray));

  String[] newArray = IntStream.range(0, strArray.length)
                               .filter(idx -> idx != 2)
                               .mapToObj(idx -> strArray[idx])
                               .toArray(String[]::new);

  System.out.println("2번째 인덱스의 요소 삭제 후: " + Arrays.toString(newArray));
}

[실행 결과]

2번째 인덱스의 요소 삭제 전: [10, 20, 30, 40, 50, 60, 70]
2번째 인덱스의 요소 삭제 후: [10, 20, 40, 50, 60, 70]

방법 2. List로 변환 후 제거

배열을 List로 변환 후 List의 remove() 메서드를 사용하여 특정 위치의 요소를 제거할 수 있습니다.

 

[제거 방법]

순서 1. 배열을 List로 변환합니다.

순서 2. List의 remove() 메서드에 특정 인덱스를 전달하여 특정 인덱스의 요소를 제거합니다.

순서 3. 특정 인덱스의 요소가 제거된 List를 다시 배열로 변환합니다.

 

다음 예제는 String 타입의 배열에서 2번째 인덱스의 요소를 제거합니다.

public static void main(String args[]) {
  String[] strArray = { "10", "20", "30", "40", "50", "60", "70" };

  System.out.println("2번째 인덱스의 요소 삭제 전: " + Arrays.toString(strArray));

  List<String> strList = new ArrayList<>(Arrays.asList(strArray));
  strList.remove(2);
  strArray = strList.toArray(new String[0]);

  System.out.println("2번째 인덱스의 요소 삭제 후: " + Arrays.toString(strArray));
}

[실행 결과]

2번째 인덱스의 요소 삭제 전: [10, 20, 30, 40, 50, 60, 70]
2번째 인덱스의 요소 삭제 후: [10, 20, 40, 50, 60, 70]

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

마지막 방법으로 System 클래스의 arraycopy() 메서드를 사용합니다.

 

arraycopy() 메서드 사용 방법은 아래 포스팅에서 확인할 수 있으므로 자세한 설명은 생략합니다.

 

[Java]배열 특정 인덱스부터 자르는 방법

배열 특정 인덱스부터 자르는 방법 Java의 배열에서 시작 인덱스와 마지막 인덱스를 설정하여 해당 범위만큼 배열을 분리해야 하는 상황이 발생할 수 있습니다. 예를 들어, 1부터 10까지 값을 가

developer-talk.tistory.com

[제거 방법]

순서 1. 새로운 배열의 크기를 (원본 배열의 크기 - 1)로 설정합니다.

순서 2. 사용하여 0부터 특정 인덱스까지 배열을 복사합니다.

순서 3. 원본 배열의 시작 위치 (특정 인덱스 + 1)로 설정하고 나머지 값을 복사합니다.

 

다음 예제는 arraycopy() 메서드를 사용하여 String 타입의 배열에서 2번째 인덱스의 요소를 제거합니다.

public static void main(String args[]) {
  String[] srcArray = { "10", "20", "30", "40", "50", "60", "70" };
  String[] destArray = new String[srcArray.length - 1];
  int removeIndex = 2;

  System.out.println("2번째 인덱스의 요소 삭제 전: " + Arrays.toString(srcArray));

  System.arraycopy(srcArray, 0, destArray, 0, removeIndex);
  System.out.println("0부터 2번째 인덱스까지 복사: " + Arrays.toString(destArray));

  System.arraycopy(srcArray, removeIndex + 1, destArray, removeIndex, srcArray.length - removeIndex - 1);
  System.out.println("나머지 값을 복사: " + Arrays.toString(destArray));
}

[실행 결과]

2번째 인덱스의 요소 삭제 전: [10, 20, 30, 40, 50, 60, 70]
0부터 2번째 인덱스까지 복사: [10, 20, null, null, null, null]
나머지 값을 복사: [10, 20, 40, 50, 60, 70]
반응형

댓글