Java - HashSet.retainAll() 사용 방법 및 예제

retainAll(Collection)는 HashSet의 요소들을 Collection 인자의 요소들과 비교하여 동일한 요소는 HashSet에 남기고 그 외의 요소들은 제거합니다. 즉, 두 객체의 공통적인 요소는 HashSet에 남기고 그 외의 요소들은 HashSet에서 삭제합니다.

public boolean retainAll(Collection c)

아래 코드로 예를 들면, hashSetA에서 hashSetAhashSetB의 공통 요소들만 남기고 나머지는 제거합니다. 즉, hashSetA의 요소가 hashSetB에 없으면 hashSetA에서 제거합니다.

hashSetA.retainAll(hashSetB);

1. HashSet.retainAll()의 기본 예제

아래 코드는 retainAll()의 기본 동작을 알 수 있는 예제입니다.

hashSet1.retainAll(hashSet2)는 hashSet1에서 hashSet2의 공통 요소만 남기고 나머지는 제거합니다. 즉, hashSet1의 요소가 hashSet2에 없으면 hashSet1에서 제거합니다.

import java.util.HashSet;

public class HashSetRetainAll {

    public static void main(String[] args) {

        HashSet<String> hashSet1 = new HashSet<>();
        hashSet1.add("apple");
        hashSet1.add("grape");
        hashSet1.add("banana");
        hashSet1.add("kiwi");

        HashSet<String> hashSet2 = new HashSet<>();
        hashSet2.add("apple");
        hashSet2.add("kiwi");
        hashSet2.add("melon");

        hashSet1.retainAll(hashSet2);

        System.out.println("hashSet1: " + hashSet1);
        System.out.println("hashSet2: " + hashSet2);
    }
}

Output:

list1: [apple, kiwi]
list2: [apple, kiwi, melon]

위 결과를 보시면 hashSet1retainAll() 수행 후 객체의 데이터가 변경될 수 있지만, hashSet2는 원본 데이터가 유지됩니다.

2. retainAll()에 ArrayList를 인자로 전달하는 예제

retainAll()은 인자로 Collection 객체를 받습니다. ArrayList도 Collection을 상속하는 클래스이기 때문에 retainAll()과 함께 사용할 수 있습니다.

import java.util.ArrayList;
import java.util.HashSet;

public class HashSetRetainAll2 {

    public static void main(String[] args) {

        HashSet<String> hashSet1 = new HashSet<>();
        hashSet1.add("apple");
        hashSet1.add("grape");
        hashSet1.add("banana");
        hashSet1.add("kiwi");

        ArrayList<String> list1 = new ArrayList<>();
        list1.add("apple");
        list1.add("kiwi");
        list1.add("melon");

        hashSet1.retainAll(list1);

        System.out.println("hashSet1: " + hashSet1);
        System.out.println("list1: " + list1);
    }
}

Output:

hashSet1: [apple, kiwi]
list1: [apple, kiwi, melon]

3. Exception handling

만약 인자로 전달되는 Collection 객체가 null이라면 NullPointerException가 발생합니다. null을 인자로 전달하지 않거나 NullPointerException에 대한 예외 처리를 해야 합니다.

import java.util.HashSet;

public class HashSetRetainAll3 {

    public static void main(String[] args) {

        HashSet<String> hashSet1 = new HashSet<>();
        hashSet1.add("apple");
        hashSet1.add("grape");
        hashSet1.add("banana");
        hashSet1.add("kiwi");

        HashSet<String> hashSet2 = null;

        hashSet1.retainAll(hashSet2);

        System.out.println("hashSet1: " + hashSet1);
        System.out.println("hashSet2: " + hashSet2);
    }
}

Output:

Exception in thread "main" java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:208)
	at java.base/java.util.AbstractCollection.retainAll(AbstractCollection.java:399)
	at HashSetRetainAll3.main(HashSetRetainAll3.java:15)
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha