✅ Set Interface
자바에서 Set은 중복된 요소를 허용하지 않는 컬렉션 인터페이스입니다. Set은 수학적인 집합 개념을 모델링하며, 고유한 요소들의 모음을 나타냅니다. Set은 다양한 구현체를 가질 수 있으며, 가장 일반적인 구현체로는 HashSet, TreeSet, LinkedHashSet이 있습니다.
- 중복되는 요소(원소)를 허용하지 않습니다.
- 저장 순서를 유지하지 않습니다. (LinkedHashSet 만 예외)
Set 인터페이스는 Collection 인터페이스를 확장하고 있으며, 다양한 메서드를 제공합니다. 예를 들어, Set에 요소를 추가하려면 add()
메서드를 사용하고, 요소를 삭제하려면 remove()
메서드를 사용합니다. 또한, Set의 크기를 확인하려면 size()
메서드를 사용할 수 있습니다.
Set은 중복된 요소를 허용하지 않으므로, 요소의 동등성(equality, 값이 같은지)을 판단하기 위해 요소 클래스에 equals()
와 hashCode()
메서드를 적절하게 구현해야 합니다. 동등성 판단은 HashSet 및 HashMap과 같은 내부 구조를 사용하는 Set 구현체에서 중요합니다.
Set은 중복된 요소를 제거하고 고유한 요소들로만 구성된 컬렉션을 다루고자 할 때 유용합니다. 예를 들어, 집합 연산을 수행하거나 중복을 제거한 목록을 생성하려는 경우에 Set을 사용할 수 있습니다.
🔹HashSet
HashSet은 해시 테이블을 사용하여 요소를 저장하는 Set의 구현체입니다. HashSet은 요소의 순서를 유지하지 않습니다. HashSet은 O(1) 시간 복잡도로 요소를 삽입, 삭제, 검색할 수 있습니다. 요소의 순서가 중요하지 않거나, 중복 요소를 허용하지 않는 경우에 사용하기 적합합니다.
- 요소의 순서를 보장하지 않습니다.
- 중복된 요소를 허용하지 않습니다.
- 해시 테이블을 기반으로 구현되어 데이터를 매우 빠르게 추가, 제거, 검색할 수 있습니다.
- 순서가 중요하지 않고, 중복된 요소를 허용하지 않아야 할 때 사용합니다.
Set<String> hashSet = new HashSet<>(); hashSet.add("apple"); hashSet.add("banana"); hashSet.add("apple"); // 중복된 요소는 추가되지 않음 for (String element : hashSet) { System.out.println(element); }
apple banana
HashSet은 중복된 요소를 허용하지 않습니다. 따라서 "apple"을 두 번 추가했지만 중복된 요소는 한 번만 저장되어 출력됩니다. HashSet은 순서를 보장하지 않기 때문에 요소의 출력 순서는 일정하지 않을 수 있습니다.
🔹TreeSet
TreeSet은 이진 검색 트리를 사용하여 요소를 저장하는 Set의 구현체입니다. TreeSet은 요소를 기본적으로 오름차순으로 정렬된 상태로 유지합니다. TreeSet은 O(log n) 시간 복잡도로 요소를 삽입, 삭제, 검색할 수 있습니다. 정렬된 상태로 요소를 유지하고 싶거나, 범위 기반의 검색이 필요한 경우에 사용하기 적합합니다.
- 요소의 정렬된 순서를 유지합니다.
- 중복된 요소를 허용하지 않습니다.
- 이진 검색 트리를 기반으로 구현되어 데이터를 정렬된 상태로 유지하고 검색할 수 있습니다.
- 정렬된 순서가 필요하고, 중복된 요소를 허용하지 않아야 할 때 사용합니다.
Set<Integer> treeSet = new TreeSet<>(); treeSet.add(3); treeSet.add(1); treeSet.add(2); for (Integer element : treeSet) { System.out.println(element); }
1 2 3
TreeSet은 요소를 정렬된 순서로 유지합니다. 따라서, 1, 2, 3의 순서대로 출력됩니다. TreeSet은 내부적으로 이진 검색 트리를 사용하여 요소를 정렬하므로, 추가된 순서와는 관계없이 정렬된 순서로 요소가 출력됩니다.
🔹LinkedHashSet
LinkedHashSet은 해시 테이블과 연결 리스트를 사용하여 요소를 저장하는 Set의 구현체입니다. LinkedHashSet은 요소를 삽입한 순서대로 유지합니다. LinkedHashSet은 HashSet의 기능에 순서를 추가한 것으로 생각할 수 있습니다. HashSet과 마찬가지로 O(1) 시간 복잡도로 요소를 삽입, 삭제, 검색할 수 있습니다. 요소의 순서를 유지하고 싶으면서도 중복 요소를 허용하지 않는 경우에 사용하기 적합합니다.
- 요소의 삽입 순서를 유지합니다.
- 중복된 요소를 허용하지 않습니다.
- 해시 테이블과 연결 리스트를 조합하여 구현되어 데이터를 순서대로 유지하고 검색할 수 있습니다.
- 요소의 삽입 순서를 유지하고, 중복된 요소를 허용하지 않아야 할 때 사용합니다.
Set<String> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add("apple"); linkedHashSet.add("banana"); linkedHashSet.add("apple"); // 중복된 요소는 추가되지 않음 for (String element : linkedHashSet) { System.out.println(element); }
apple banana
LinkedHashSet은 요소의 삽입 순서를 유지합니다. 따라서, "apple"을 먼저 추가하고 "banana"를 추가한 순서대로 요소가 출력됩니다. 중복된 요소는 추가되지 않기 때문에, "apple"이 한 번만 출력됩니다.
🏷️이미지 출처 및 참고한 사이트
Uploaded by N2T