자바의 Set
인터페이스는 자바 패키지의 컬렉션 프레임워크에 속하는 인터페이스 중 하나이다. Set
인터페이스는 중복을 허용하지 않는 유일한 요소의 집합을 나타낸다. Set
은 순서를 보장하지 않으며, 특정 요소가 집합에 있는지 여부를 확인하는데 최적화 되어있다.
Set
인터페이스는 HashSet
,LinkedHashSet
,TreeSet
등의 여러 구현 클래스를 가지고 있으며 각 클래스는 Set
과 각각의 특성을 가지고 있다.
주요 메서드
add(E e)
지정된요소를세트에추가한다(이미존재하는경우추가하지 음).
addAll(Collection<? extends E> c)
: 지정된 컬렉션의 모든 요소를 세트에 추가한다.
contains(Object o
: 세트가지정된요소를포함하고있는지여부를반환한다.
remove(Object o)
: 지정된요소를세트에서제거한다.
containsAll(Collection<?> c)
: 세트가 지정된 컬렉션의 모든 요소를 포함하고 있는지 여부를 환한다.
removeAll(Collection<?> c)
: 지정된 컬렉션에 포함된 요소를 세트에서 모두 제거한다.
retainAll(Collection<?> c)
: 지정된컬렉션에포함된요소만을유지하고나머지요소는 세트₩ 에서 제거한다.
clear()
: 세트에서 모든 요소를 제거한다.
size()
: 세트에 있는 요소의 수를 반환한다.
iterator()
:세트의 요소에 대한 반복자를 반환한다.
toArray()
: 세트의 모든 요소를 배열로 반환한다.
toArray(T[] a)
: 세트의 모든 요소를 지정된배열로 반환한다.
HashSet
의 주요 연산은 평균적으로 O(1) 시간 복잡도를 가진다.HashSet
에 연결리스트를 추가해서 요소들의 순서를 유지한다.LinkedHashSet
의 주요 연산은 평균적으로 O(1) 시간 복잡도를 가진다.TreeSet
은 이진 탐색 트리를 개선한 레드-블랙 트리를 내부에서 사용한다.Comparator
로 변경할 수 있다.LinkedHashSet
의 주요 연산은 평균적으로 O(log(n)) 시간 복잡도를 가진다.트리구조
import java.util.*;
public class JavaSetMain {
public static void main(String[] args) {
run(new HashSet<>());
run(new LinkedHashSet<>());
run(new TreeSet<>());
}
private static void run(Set<String> set) {
System.out.println("set = " + set.getClass());
set.add("C");
set.add("B");
set.add("A");
set.add("1");
set.add("2");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
}
}
HashSet
,LinkedHashSet
,TreeSet
모두 Set
인터페이스를 구현하기 때문에 구현체를 변경하면서 실행할 수 있다.
iterator()
를 호출하면 컬렉션을 반복해서 출력할 수 있다.
iterator.hasNext()
: 다음 데이터가 있는지 확인한다.iterato.nwxt()
: 다음 데이터를 반환한다.