[java] Set 인터페이스

Set 인터페이스는 중복을 허용하지 않는 요소들의 집합을 나타내는 자바 컬렉션 인터페이스입니다. Set은 요소들의 순서를 보장하지 않으며, 해시 테이블을 통해 요소를 저장합니다. 이로 인해 Set은 매우 효율적으로 요소의 추가, 삭제, 검색 작업을 수행할 수 있습니다.

Java에서 Set 인터페이스는 java.util 패키지에 포함되어 있습니다. Set 인터페이스는 다음과 같은 메소드를 제공합니다:

  1. add(element): Set에 주어진 요소를 추가합니다.
  2. remove(element): Set에서 주어진 요소를 제거합니다.
  3. contains(element): Set에 주어진 요소가 있는지 확인합니다.
  4. size(): Set에 저장된 요소의 개수를 반환합니다.

일반적으로 사용되는 Set 구현체로는 HashSet, TreeSet, LinkedHashSet이 있습니다.

HashSet

HashSet은 가장 일반적으로 사용되는 Set 구현체입니다. HashSet은 내부적으로 해시 테이블을 사용하여 요소를 저장합니다. 요소들은 해시 함수를 통해 해시값으로 변환된 후, 해시 테이블의 버킷에 저장됩니다. HashSet은 순서를 보장하지 않으며, 중복된 요소를 허용하지 않습니다.

Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
set.remove("Apple");

System.out.println(set.size()); // 2
System.out.println(set.contains("Banana")); // true

TreeSet

TreeSet은 요소들을 정렬된 상태로 저장하는 Set 구현체입니다. TreeSet은 이진 검색 트리(binary search tree)를 사용하여 요소를 저장하며, 요소들은 기본적으로 오름차순으로 정렬됩니다.

Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);

System.out.println(set); // [1, 2, 3]

LinkedHashSet

LinkedHashSet은 순서를 보장하는 Set 구현체입니다. 요소들은 해시 테이블과 링크드 리스트를 결합하여 저장됩니다. 따라서 요소들이 추가된 순서대로 반복됩니다.

Set<String> set = new LinkedHashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");

System.out.println(set); // [Apple, Banana, Cherry]

Set 인터페이스와 구현체를 활용하면 중복을 허용하지 않는 요소들의 집합을 효율적으로 다룰 수 있습니다.

참고 자료