[Java] Set

Set이란?

  • 중복되는 값들은 제거되고 고유한 값들만 저장되는 Container이다.

  • 순서대로 저장되어 있지 않다.

Tip

List

  • List는 중복되는 값 저장이 가능하다.
  • List에 있는 값들은 순서대로 저장되어 있다.
  • 수학에서의 집합과 같다.

  • Collection 인터페이스를 상속받을 뿐 Set 고유 인터페이스는 없다.

image

Set Methods

add() : 값을 넣기

  • boolean add(E e)

  • 중복값이 있으면 그 값은 add되지 않는다.

remove() : 제거하기

  • boolean remove(Object o)

size() : 갯수 세기

  • int size()

isEmpty() :

  • boolean isEmpty()

contains()

  • boolean contains(Object o)

toArray() : 배열로 바꾸기

  • Object[] toArray()

  • <T> T[] toArray(T[] a)

containAll() : 부분집합

  • boolean containsAll(Collection<?> c)

  • A.containAll(B) : B는 A의 부분집합인가?

  • B가 A의 부분집합이면 true를 반환하고, 아니면 false를 반환한다.

addAll() : 합집합

  • A.addAll(B) : B 전체를 A에 add한다.

  • boolean addAll(Collection<? extends E> c) : 값이 바뀌면 true를, 바뀌지 않으면 false를 반환한다.

  • A와 B의 합집합을 만들 때 사용된다.

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Ex_Iterator {
    public static void main(String[] args) {
        // SET A 생성
        Set<Integer> A = new HashSet<>();
        A.add(4);
        A.add(3);
        A.add(1);

        // SET B 생성
        Set<Integer> B = new HashSet<>();
        B.add(100);
        B.add(3);
        B.add(-25);

        // A와 B 합집합 만들기
        A.addAll(B);

        // A 출력하기
        Iterator it = A.iterator();

        while (it.hasNext()) {
            System.out.println(it.next()); // 결과 : 1 3 4 100 -25
        }
    }
}

retainAll() : 교집합

  • A.retainAll(B) : A와 B의 교집합 값만을 A에 남기겠다.

  • boolean retainAll(Collection<?> c) : 값이 바뀌면 true를, 바뀌지 않으면 false를 반환한다.

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Ex_Iterator {
    public static void main(String[] args) {
        // SET A 생성
        Set<Integer> A = new HashSet<>();
        A.add(4);
        A.add(3);
        A.add(1);
        A.add(3);

        // SET B 생성
        Set<Integer> B = new HashSet<>();
        B.add(100);
        B.add(3);
        B.add(-25);
        B.add(30);

        // A와 B 교집합 만들기
        System.out.println(A.retainAll(B)); // true

        // A 출력하기
        Iterator it = A.iterator();

        while (it.hasNext()) {
            System.out.println(it.next());  // 결과 : 1 3
        }
    }
}

removeAll() : 차집합

  • A.removeAll(B) : A집합에서 B를 뺀 차집합

  • boolean removeAll(Collection<?> c) : 값이 바뀌면 true를, 바뀌지 않으면 false를 반환한다.

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Ex_Iterator {
    public static void main(String[] args) {
        // SET A 생성
        Set<Integer> A = new HashSet<>();
        A.add(4);
        A.add(3);
        A.add(1);
        A.add(3);

        // SET B 생성
        Set<Integer> B = new HashSet<>();
        B.add(100);
        B.add(3);
        B.add(-25);
        B.add(30);

        // A = (A-B) 차집합 만들기
        System.out.println(A.removeAll(B)); // true

        // A 출력하기
        Iterator it = A.iterator();

        while (it.hasNext()) {
            System.out.println(it.next());  // 결과 : 1 4
        }
    }
}