Java/컬렉션

[Java]ArrayList 다중 삭제

DevStory 2022. 6. 22.

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() 메서드를 호출합니다.
반응형

댓글