Java의 ArrayList 클래스는 List 인터페이스를 구현한 크기 조절 가능한 배열(resizable-array) 기반 자료구조입니다. null 값을 허용하며, 요소를 동적으로 추가하고 삭제할 수 있어 실무에서 가장 널리 사용되는 컬렉션 중 하나입니다.
ArrayList에는 리스트의 요소를 제거하는 두 가지 대표적인 메서드가 있습니다. 바로 clear()와 removeAll()입니다. 두 메서드 모두 요소를 삭제한다는 공통점이 있지만, 동작 방식과 용도는 명확히 다릅니다.
clear() 메서드란?
clear() 메서드는 현재 리스트 객체에 포함된 모든 요소를 한 번에 제거합니다. 별도의 매개변수 없이 호출하며, 실행 후 리스트는 빈 상태([])가 됩니다.
예제 코드
import java.util.ArrayList;
public class ClearExample {
public static void main(String[] args){
// ArrayList 객체 생성
ArrayList<String> list = new ArrayList<String>();
list.add("JavaFX");
list.add("Java");
list.add("WebGL");
list.add("OpenCV");
list.add("Impala");
System.out.println("ArrayList의 내용: \n"+list);
// 모든 요소 제거
list.clear();
System.out.println("clear() 호출 후 ArrayList의 내용: "+list);
}
}
실행 결과
ArrayList의 내용: [JavaFX, Java, WebGL, OpenCV, Impala] clear() 호출 후 ArrayList의 내용: []
removeAll() 메서드란?
removeAll() 메서드는 다른 컬렉션 객체를 매개변수로 받아, 현재 ArrayList에서 해당 컬렉션에 포함된 요소들만 골라 제거합니다. 즉, 리스트 전체가 아닌 특정 요소들을 선택적으로 삭제할 때 유용합니다.
예제 코드
import java.util.ArrayList;
public class ClearExample {
public static void main(String[] args){
// 첫 번째 ArrayList 객체 생성
ArrayList<String> list1 = new ArrayList<String>();
list1.add("JavaFX");
list1.add("Java");
list1.add("WebGL");
list1.add("OpenCV");
list1.add("OpenNLP");
list1.add("JOGL");
list1.add("Hadoop");
list1.add("HBase");
list1.add("Flume");
list1.add("Mahout");
list1.add("Impala");
System.out.println("ArrayList1의 내용: \n"+list1);
// 두 번째 ArrayList 객체 생성
ArrayList<String> list2 = new ArrayList<String>();
list2.add("JOGL");
list2.add("Hadoop");
list2.add("HBase");
list2.add("Flume");
list2.add("Mahout");
list2.add("Impala");
System.out.println("ArrayList2의 내용: \n"+list2);
// list2에 포함된 요소들을 list1에서 제거
list1.removeAll(list2);
System.out.println("제거 후 ArrayList1의 내용: \n"+list1);
}
}
실행 결과
ArrayList1의 내용: [JavaFX, Java, WebGL, OpenCV, OpenNLP, JOGL, Hadoop, HBase, Flume, Mahout, Impala] ArrayList2의 내용: [JOGL, Hadoop, HBase, Flume, Mahout, Impala] 제거 후 ArrayList1의 내용: [JavaFX, Java, WebGL, OpenCV, OpenNLP]
clear()와 removeAll()의 핵심 차이점
- clear() — 매개변수 없이 호출하며, 리스트의 모든 요소를 제거해 빈 리스트로 만듭니다.
- removeAll(Collection c) — 매개변수로 전달된 컬렉션에 포함된 요소만 선택적으로 제거하며, 나머지 요소는 그대로 유지됩니다.
- 단순히 리스트를 비우는 목적이라면 내부적으로 더 효율적으로 동작하는 clear()를 사용하는 것이 좋습니다.
- 반면, 두 리스트 간의 차집합을 구하거나 특정 데이터만 걸러내야 하는 경우에는 removeAll()이 적합합니다.