개발자는 기록이 답이다

Java List에서 요소 삭제: remove(), removeAll(), removeIf() 메서드 사용법 비교 본문

언어/Java

Java List에서 요소 삭제: remove(), removeAll(), removeIf() 메서드 사용법 비교

slow-walker 2023. 10. 24. 09:45

 

List에서 요소를 삭제하는 방법을 위해 .rem 만 입력해도 4가지 방법이 나온다.


1. remove(int index)

`remove(int index)` 메서드는 지정된 인덱스에 있는 요소를 삭제합니다.

import java.util.ArrayList;
import java.util.List;

public class RemoveAtIndexExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        fruits.remove(1); // 인덱스 1에 있는 "Banana" 삭제

        System.out.println(fruits); // 출력: [Apple, Cherry]
    }
}



2. remove(Object o)

`remove(Object o)` 메서드는 주어진 객체와 동일한 객체를 리스트에서 삭제합니다. 객체의 동등성(Equality)을 기반으로 동작합니다.

import java.util.ArrayList;
import java.util.List;

public class RemoveObjectExample {
    public static void main(String[] args) {
        List<String> colors = new ArrayList<>();
        colors.add("Red");
        colors.add("Green");
        colors.add("Blue");

        colors.remove("Green"); // "Green" 객체 삭제

        System.out.println(colors); // 출력: [Red, Blue]
    }
}

 

3. removeAll

`removeAll` 메서드는 지정된 컬렉션의 요소와 일치하는 모든 요소를 현재 리스트에서 삭제합니다.

import java.util.ArrayList;
import java.util.List;

public class RemoveAllExample {
    public static void main(String[] args) {
        List numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        List toRemove = new ArrayList<>();
        toRemove.add(2);
        toRemove.add(3);

        numbers.removeAll(toRemove);

        System.out.println(numbers); // 출력: [1]
    }
}

 

 

4. removeIf

`removeIf` 메서드는 주어진 `Predicate` 조건을 만족하는 요소를 삭제합니다.

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class RemoveIfExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            numbers.add(i);
        }

        // Predicate를 사용하여 조건 정의 : 짝수를 찾는 isEven 
        Predicate<Integer> isEven = number -> number % 2 == 0;

        // removeIf 메서드를 사용하여 조건을 만족하는 요소 삭제 : Predicate가 true를 반환하는 요소들을 삭제
        numbers.removeIf(isEven);

        // 삭제된 결과 출력
        System.out.println(numbers); // 출력: [1, 3, 5, 7, 9]
    }
}

Java 8에서 `List` 및 다른 컬렉션 클래스에 중요한 업데이트와 추가된 메서드 중 하나는 removeIf(Predicate) 메서드입니다. 이 메서드는 이전 버전의 Java에서는 사용할 수 없었으며 Java 8부터 도입되었습니다.

   - Java 8 이전: Java 8 이전 버전에서는 `removeIf()` 메서드가 존재하지 않았으므로 일반적으로 `for` 루프 또는 `Iterator`를 사용하여 요소를 조건에 따라 제거해야 했습니다. 이는 코드를 더 복잡하게 만들 수 있습니다.

   - Java 8 이후: Java 8부터는 `List` 인터페이스에 `removeIf(Predicate)` 메서드가 추가되었습니다. 이 메서드를 사용하면 간결하고 가독성 높은 방식으로 컬렉션에서 조건에 맞는 요소를 삭제할 수 있습니다. 이 메서드를 사용하여 조건을 만족하는 요소를 삭제하는 데 효율적입니다.

List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

// Java 8 이후
numbers.removeIf(number -> number % 2 == 0);