ArrayList 다중 삭제
이번 포스팅은 Java에서 ArrayList의 요소를 다중 삭제하는 방법을 소개합니다.
예제 1. 특정 조건을 만족하는 요소 삭제
특정 조건을 만족하는 요소를 제거하고 싶은 경우 removeIf() 메서드를 사용할 수 있습니다. removeIf() 메서드는 Java Version 8부터 사용할 수 있으며 주어진 조건을 만족하는 요소들을 제거합니다.
removeIf() 메서드는 주어진 조건을 만족하는 요소가 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
다음 예제는 String 타입의 ArrayList 객체에서 앞 글자가 "f"로 시작하는 요소들을 제거합니다.
public class Main {
public static void main(String args[]) {
ArrayList<String> strArrayList = new ArrayList<>();
// 요소 추가
strArrayList.add("one");
strArrayList.add("two");
strArrayList.add("three");
strArrayList.add("four");
strArrayList.add("five");
strArrayList.add("six");
System.out.println("removeIf() 메서드 호출 전");
System.out.println(strArrayList);
System.out.println("\nremoveIf() 메서드 반환 결과");
System.out.println(strArrayList.removeIf(item -> item.startsWith("f")));
System.out.println("\nremoveIf() 메서드 호출 후");
System.out.println(strArrayList);
}
}
실행 결과
removeIf() 메서드 호출 전
[one, two, three, four, five, six]
removeIf() 메서드 반환 결과
true
removeIf() 메서드 호출 후
[one, two, three, six]
또 다른 방법으로 반복자(Iterator)를 사용할 수 있습니다. ArrayList 객체를 반복자로 변환 후 반복문을 실행합니다. 반복문에서 주어진 조건을 만족하는 경우 반복자의 remove() 메서드를 호출합니다.
다음 예제는 String 타입의 ArrayList 객체에서 앞 글자가 "f"로 시작하는 요소를 반복자를 사용하여 제거합니다.
public class Main {
public static void main(String args[]) {
ArrayList<String> strArrayList = new ArrayList<>();
// 요소 추가
strArrayList.add("one");
strArrayList.add("two");
strArrayList.add("three");
strArrayList.add("four");
strArrayList.add("five");
strArrayList.add("six");
System.out.println("반복자 생성 전");
System.out.println(strArrayList);
Iterator<String> iterator = strArrayList.iterator();
while(iterator.hasNext()) {
String str = iterator.next();
if(str.startsWith("f")) iterator.remove();
}
System.out.println("\n반복자 생성 후");
System.out.println(strArrayList);
}
}
실행 결과
반복자 생성 전
[one, two, three, four, five, six]
반복자 생성 후
[one, two, three, six]
예제 2. 인덱스 범위로 삭제
Java Collection 프레임워크의 subList() 메서드에서 인덱스 범위를 설정하고 clear() 메서드로 인덱스 범위의 요소들을 제거할 수 있습니다.
다음 예제는 2번째 인덱스에서 4번째 인덱스까지의 요소들을 subList() 메서드로 반환 후 clear() 메서드를 호출하여 제거합니다.
public class Main {
public static void main(String args[]) {
ArrayList<String> strArrayList = new ArrayList<>();
// 요소 추가
strArrayList.add("one");
strArrayList.add("two");
strArrayList.add("three");
strArrayList.add("four");
strArrayList.add("five");
strArrayList.add("six");
System.out.println("subList().clear() 메서드 호출 전");
System.out.println(strArrayList);
// subList().clear() 메서드 호출
strArrayList.subList(2, 4).clear();
System.out.println("\nsubList().clear() 메서드 호출 후");
System.out.println(strArrayList);
}
}
실행 결과
subList().clear() 메서드 호출 전
[one, two, three, four, five, six]
subList().clear() 메서드 호출 후
[one, two, five, six]
예제 3. 다른 ArrayList에 존재하는 요소를 삭제
두 개의 ArrayList에서 동일한 값을 제거하고 싶은 경우 removeAll() 메서드를 사용할 수 있습니다. removeAll() 메서드에 특정 컬렉션 객체를 전달하여 동일한 값을 제거합니다.
다음 예제는 strArrayList1에서 strArrayList2와 동일한 값을 가지는 요소를 제거합니다.
public class Main {
public static void main(String args[]) {
ArrayList<String> strArrayList1 = new ArrayList<>(
Arrays.asList("one", "two", "three", "four", "five")
);
ArrayList<String> strArrayList2 = new ArrayList<>(
Arrays.asList("one", "three", "five")
);
System.out.println("removeAll() 메서드 호출 전");
System.out.println(strArrayList1);
// removeAll() 메서드 호출
strArrayList1.removeAll(strArrayList2);
System.out.println("\nremoveAll() 메서드 호출 후");
System.out.println(strArrayList1);
}
}
실행 결과
removeAll() 메서드 호출 전
[one, two, three, four, five]
removeAll() 메서드 호출 후
[two, four]
예제 4. 모두 삭제
ArrayList의 모든 요소를 제거하고 싶은 경우 clear() 메서드를 사용합니다.
다음 예제는 clear() 메서드를 호출합니다.
public class Main {
public static void main(String args[]) {
ArrayList<String> strArrayList = new ArrayList<>(
Arrays.asList("one", "two", "three", "four", "five")
);
System.out.println("clear() 메서드 호출 전");
System.out.println(strArrayList);
// clear() 메서드 호출
strArrayList.clear();
System.out.println("\nclear() 메서드 호출 후");
System.out.println(strArrayList);
}
}
실행 결과
clear() 메서드 호출 전
[one, two, three, four, five]
clear() 메서드 호출 후
[]
정리
- 특정 조건을 만족하는 요소를 제거하고 싶은 경우 removeIf() 메서드 또는 반복자를 사용합니다.
- 특정 인덱스 범위에 해당하는 요소를 제거하고 싶은 경우 subList().clear() 메서드를 사용합니다.
- 두 개의 ArrayList에서 동일한 요소를 제거하고 싶은 경우 removeAll() 메서드를 사용합니다.
- 모든 요소를 제거하고 싶은 경우 clear() 메서드를 호출합니다.
'Java > 컬렉션' 카테고리의 다른 글
[Java]ArrayList 비어 있는지 확인하는 방법 (0) | 2022.06.23 |
---|---|
[Java]ArrayList 또는 List 최대, 최소, 합계, 평균 구하기 (0) | 2022.06.22 |
[Java]ArrayList 초기화 방법 (0) | 2022.06.20 |
[Java]HashMap 특정 키가 존재하는지 확인하는 방법 (0) | 2022.06.20 |
[Java]ArrayList 특정 값 삭제 (0) | 2022.05.30 |
댓글