Java에서 배열 요소를 제거하는 방법
Java에서 배열을 만들 때 데이터 유형과 크기를 지정합니다. JVM에서 배열 요소에 필요한 메모리를 할당하는 데 사용됩니다. 배열에서 요소를 제거하는 특정 방법은 없습니다.
1. for 루프를 사용하여 배열에서 요소 제거
이 방법을 사용하려면 새 배열을 만들어야 합니다. for 루프를 사용하여 제거하려는 요소 없이 새 배열을 채울 수 있습니다.
package com.journaldev.java;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
int[] arr_new = new int[arr.length-1];
int j=3;
for(int i=0, k=0;i<arr.length;i++){
if(i!=j){
arr_new[k]=arr[i];
k++;
}
}
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After deletion :" + Arrays.toString(arr_new));
}
}

이 코드는 인덱스 3에 있는 요소를 제거합니다. 이 메서드는 인덱스 3에 있는 요소를 제외한 모든 요소를 새 배열에 복사합니다.
2. 해당 값으로 배열 요소 삭제
앞의 경우와 달리 이 코드는 해당 값에 따라 요소를 삭제합니다. 삭제 후 배열의 크기를 알아야 하므로 중복에는 작동하지 않습니다.
package com.journaldev.java;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
int[] arr_new = new int[arr.length-1];
int j=3;
for(int i=0, k=0;i<arr.length;i++){
if(arr[i]!=j){
arr_new[k]=arr[i];
k++;
}
}
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After deletion :" + Arrays.toString(arr_new));
}
}

이 경우와 이전 경우의 유일한 차이점은 if 조건에서 i!=j
대신 arr[i]!=j
입니다.
3. 배열에 중복이 포함된 경우 해당 값으로 요소 삭제
중복된 경우 값을 기준으로 삭제를 수행하려면 ArrayList를 사용해야 합니다. ArrayList는 미리 크기를 지정할 필요가 없기 때문에 동적으로 확장할 수 있습니다.
package com.journaldev.java;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,3,3,4,5};
ArrayList<Integer> arr_new = new ArrayList<>();
int j=3;
for(int i=0;i<arr.length;i++){
if(arr[i]!=j){
arr_new.add(arr[i]);
}
}
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After deletion :" +arr_new);
}
}

4. 동일한 배열의 요소 이동
이 방법에는 동일한 배열의 요소 이동이 포함됩니다. 요소 이동은 삭제할 요소를 다음 인덱스의 요소로 대체합니다.
package com.journaldev.java;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,3,3,4,5};
int j=3;
System.out.println("Before deletion :" + Arrays.toString(arr));
int count =0;
for(int i = 0; i < arr.length; i++){
if(arr[i] == j){
count++;
// shifting elements
for(int k = i; k < arr.length - 1; k++){
arr[k] = arr[k+1];
}
i--;
// break;
}
}
System.out.print("After Deletion :" );
for(int i = 0; i < arr.length-count; i++){
System.out.print(" " + arr[i]);
}
System.out.println();
System.out.println("Whole array :" + Arrays.toString(arr));
}
}
개수 변수는 삭제된 요소의 수를 나타냅니다. 이 변수는 배열이 인쇄될 때까지 인덱스를 추적하는 데 필수적입니다. 이 방법은 중복도 처리합니다.

5. ArrayList에서 요소 삭제
ArrayList는 배열에 의해 지원됩니다. ArrayList에서 요소 삭제는 간단합니다. 내장 함수에 대한 간단한 호출이 필요합니다.
package com.journaldev.java;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,3,3,4,5};
ArrayList<Integer> arr_new = new ArrayList<Integer>();
for (int i : arr)
{
arr_new.add(i);
}
arr_new.remove(3);
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After Deletion:" + arr_new);
}
}
remove(i)
함수를 호출하면 인덱스 i에 있는 요소가 제거됩니다. ArrayLists의 삭제는 Arrays에 비해 비교적 쉽습니다.

결론
다른 방법을 사용하여 배열의 요소를 삭제하는 몇 가지 예를 보았습니다. Array의 요소 삭제와 ArrayList의 차이점은 분명합니다. 삭제가 반복해서 수행되는 경우 내장 기능을 활용하려면 ArrayList를 사용해야 합니다. 배열에 요소를 추가하는 경우도 마찬가지입니다. 동적 특성으로 인해 ArrayList는 배열을 변경하는 더 쉽고 덜 번거로운 방법을 제공합니다.