Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java ArrayList의 clear()와 removeAll() 메서드 차이점 완벽 정리

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()이 적합합니다.