배열은 고정된 길이의 요소를 갖고 있기 때문에, 기본적으로 특정 요소를 제거하여 길이를 줄일 수는 없습니다. 새로운 배열을 만들어야 하는데, 어떻게 구현하는지 알아보겠습니다.
1. List를 이용하여 배열에서 요소 제거
List는 가변적으로 길이를 변경할 수 있는 자료구조입니다. 배열을 리스트로 변경한 뒤에 요소들을 제거하고, 다시 리스트를 배열로 변경하는 방법이 있습니다.
아래 예제에서 remove()
는 배열을 리스트로 변경하고 인자로 전달된 Index를 제거합니다. 그리고 리스트를 배열로 변경하여 리턴합니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Example {
private static String[] remove(String[] arr, int index) {
if (arr == null || index < 0 || index >= arr.length) {
return arr;
}
List<String> result = new ArrayList<>(Arrays.asList(arr));
result.remove(index);
return result.toArray(new String[0]);
}
public static void main(String[] args) {
String[] arr = {"a", "b", "c", "d", "e"};
arr = remove(arr, 3);
System.out.println(Arrays.toString(arr));
}
}
Output:
[a, b, c, e]
2. System.arraycopy()를 이용하여 배열에서 요소 제거
System.arraycopy(srcArr, srcPos, destArr, destPos, length)
는 srcArr의 destArr로 복사하는데 srcArr의 srcPos부터 복사를 시작합니다. 복사되는 위치는 destArr의 destPos Index부터입니다. 복사하는 길이는 length로 인자를 전달하면 됩니다.
System.arraycopy()의 자세한 API 사용 방법은 Java - 배열 복사 (deep copy)를 참고해주세요.
System.arraycopy()
를 두번 사용하면, 제거하려는 Index를 제외하고 모든 요소들을 복사할 수 있습니다.
예를 들어 배열의 크기가 5이고, Index 3의 요소를 제거할 때, Index 0에서 2까지를 새로운 배열의 Index 0에서 2에 복사할 수 있습니다.
그리고 Index 4부터 5까지의 요소들을 새로운 배열의 Index 3에서 4까지 복사할 수 있습니다. 이렇게 하면 Index 3이 제거된, 길이가 4인 배열을 만들 수 있습니다.
import java.util.Arrays;
public class Example1 {
private static String[] remove(String[] arr, int index) {
if (arr == null || index < 0 || index >= arr.length) {
return arr;
}
String[] result = new String[arr.length - 1];
System.arraycopy(arr, 0, result, 0, index);
System.arraycopy(arr, index + 1, result, index, arr.length - index - 1);
return result;
}
public static void main(String[] args) {
String[] arr = {"a", "b", "c", "d", "e"};
arr = remove(arr, 3);
System.out.println(Arrays.toString(arr));
}
}
Output:
[a, b, c, e]
3. for문을 이용하여 배열에서 요소 제거
2번과 동일한 방법인데, 특정 요소를 제외한 나머지를 모두 새로운 배열에 복사시키는 방법입니다.
대신 System.arraycopy()
와 같은 라이브러리를 사용하지 않고 for문을 사용하여 직접 제거할 요소를 제외하고 나머지 요소들을 복사하였습니다.
import java.util.Arrays;
public class Example2 {
private static String[] remove(String[] arr, int index) {
if (arr == null || index < 0 || index >= arr.length) {
return arr;
}
String[] result = new String[arr.length - 1];
int copyIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (i == index) {
continue;
}
result[copyIndex++] = arr[i];
}
return result;
}
public static void main(String[] args) {
String[] arr = {"a", "b", "c", "d", "e"};
arr = remove(arr, 3);
System.out.println(Arrays.toString(arr));
}
}
Output:
[a, b, c, e]
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기