배열 마지막 요소 제거하는 방법
Java에서 배열은 선언과 동시에 고정된 크기를 가지는 데이터입니다. 배열이 생성되면 배열의 크기가 고정이므로 새로운 요소를 추가하거나 제거할 수 없습니다.
그러나, 특정 크기를 가지는 새로운 배열을 생성 후 기존 배열에 할당하는 작업을 수행하여 배열의 마지막 요소를 제거할 수 있습니다.
이번 포스팅은 Java에서 제공하는 다양한 클래스를 사용하여 배열의 마지막 요소를 제거할 수 있는 몇 가지 방법을 소개합니다.
방법 1. 반복문
가장 심플한 방법인 반복문을 사용하여 배열의 마지막 요소를 제거할 수 있습니다.
[제거 방법]
순서 1. 기존 배열의 크기의 1보다 작은 새로운 배열을 생성합니다.
순서 2. 반복문을 사용하여 새로운 배열에 값을 할당합니다.
다음 예제는 int 타입인 배열의 마지막 요소를 제거합니다.
public class MainForm {
public static int[] lastElementRemove(int[] srcArray) {
int[] newArray = new int[srcArray.length - 1];
for(int index = 0; index < srcArray.length - 1; index++) {
newArray[index] = srcArray[index];
}
return newArray;
}
public static void main(String args[]) {
int[] intArray = {0, 10, 20, 30, 40};
System.out.println("마지막 요소 제거 전: " + Arrays.toString(intArray));
intArray = lastElementRemove(intArray);
System.out.println("마지막 요소 제거 후: " + Arrays.toString(intArray));
}
}
[실행 결과]
마지막 요소 제거 전: [0, 10, 20, 30, 40]
마지막 요소 제거 후: [0, 10, 20, 30]
방법 2. Arrays 클래스의 copyOf 메서드
두 번째 Arrays 클래스에서 제공하는 copyOf() 메서드를 사용하여 마지막 요소가 제거된 새로운 배열을 생성할 수 있습니다.
public static <T> T[] copyOf(T[] original, int newLength);
copyOf() 메서드는 매개변수로 전달받은 기존 배열(original)의 0번째 인덱스부터 특정 개수(newLength)만큼 복사된 요소로 구성된 새로운 배열을 반환합니다.
다음 예제는 int 타입인 배열의 마지막 요소를 제거합니다.
public class MainForm {
public static int[] lastElementRemove(int[] srcArray) {
return Arrays.copyOf(srcArray, srcArray.length - 1);
}
public static void main(String args[]) {
int[] intArray = {0, 10, 20, 30, 40};
System.out.println("마지막 요소 제거 전: " + Arrays.toString(intArray));
intArray = lastElementRemove(intArray);
System.out.println("마지막 요소 제거 후: " + Arrays.toString(intArray));
}
}
[실행 결과]
마지막 요소 제거 전: [0, 10, 20, 30, 40]
마지막 요소 제거 후: [0, 10, 20, 30]
방법 3. Arrays 클래스의 copyOfRange 메서드
copyOf()에서 기능이 확장된 copyOfRange() 메서드를 사용하여 마지막 요소가 제거된 새로운 배열을 생성할 수 있습니다. copyOfRange() 메서드는 복사하고 싶은 요소의 범위를 설정할 수 있습니다.
public static <T> T[] copyOfRange(T[] original, int from, int to);
다음 예제는 int 타입인 배열의 마지막 요소를 제거합니다.
public class MainForm {
public static int[] lastElementRemove(int[] srcArray) {
return Arrays.copyOfRange(srcArray, 0, srcArray.length - 1);
}
public static void main(String args[]) {
int[] intArray = {0, 10, 20, 30, 40};
System.out.println("마지막 요소 제거 전: " + Arrays.toString(intArray));
intArray = lastElementRemove(intArray);
System.out.println("마지막 요소 제거 후: " + Arrays.toString(intArray));
}
}
[실행 결과]
마지막 요소 제거 전: [0, 10, 20, 30, 40]
마지막 요소 제거 후: [0, 10, 20, 30]
방법 4. System 클래스의 arraycopy 메서드
또 다른 방법으로 System 클래스의 arraycopy() 메서드를 사용하여 배열의 마지막 요소가 제거된 새로운 배열을 생성할 수 있습니다. 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
- 원본 배열에서 복사되는 데이터 개수입니다.
- 원본 배열의 길이보다 큰 값이 전달되는 경우 ArrayIndexOutOfBoundsException이 발생합니다.
다음 예제는 int 타입인 배열의 마지막 요소를 제거합니다.
public class MainForm {
public static int[] lastElementRemove(int[] srcArray) {
int[] newArray = new int[srcArray.length - 1];
System.arraycopy(srcArray, 0,newArray, 0, srcArray.length - 1);
return newArray;
}
public static void main(String args[]) {
int[] intArray = {0, 10, 20, 30, 40};
System.out.println("마지막 요소 제거 전: " + Arrays.toString(intArray));
intArray = lastElementRemove(intArray);
System.out.println("마지막 요소 제거 후: " + Arrays.toString(intArray));
}
}
[실행 결과]
마지막 요소 제거 전: [0, 10, 20, 30, 40]
마지막 요소 제거 후: [0, 10, 20, 30]
방법 5. List로 변환
마지막 방법으로 배열을 List로 변환 후 remove() 메서드를 호출하여 마지막 요소를 제거 후 List를 다시 배열로 변환합니다.
이 방법의 단점은 List는 기본 타입을 허용하지 않으므로 배열의 타입이 기본 타입인 경우 래퍼 클래스로 변경해야 합니다.
다음 예제는 Integer 타입인 배열의 마지막 요소를 제거합니다.
public class MainForm {
public static Integer[] lastElementRemove(Integer[] srcArray) {
List<Integer> newList = new ArrayList<>(Arrays.asList(srcArray));
newList.remove(srcArray.length - 1);
return newList.toArray(new Integer[0]);
}
public static void main(String args[]) {
Integer[] intArray = {0, 10, 20, 30, 40};
System.out.println("마지막 요소 제거 전: " + Arrays.toString(intArray));
intArray = lastElementRemove(intArray);
System.out.println("마지막 요소 제거 후: " + Arrays.toString(intArray));
}
}
[실행 결과]
마지막 요소 제거 전: [0, 10, 20, 30, 40]
마지막 요소 제거 후: [0, 10, 20, 30]
'Java > 배열' 카테고리의 다른 글
[Java]배열 초기화 방법(Initializing Array) (0) | 2022.09.08 |
---|---|
[Java]배열의 크기를 변경하는 방법 (0) | 2022.09.05 |
[Java]배열을 스트림으로 변환하는 방법(Array to Stream) (0) | 2022.09.02 |
[Java]배열 첫 번째 요소 제거하는 방법 (0) | 2022.09.01 |
[Java]배열 복사하는 방법 (0) | 2022.08.22 |
댓글