[Java] 자바 Set 이란? 사용법, HashSet, TreeSet, LinkedHashSet

자바 Set은 순서를 저장하지 않고 중복되지 않는 값들을 저장하는 인터페이스입니다. 자바 Set을 구현한 클래스에는 HashSet, TreeSet, LinkedHashSet이 있습니다. 그럼 바로 Set의 특징은 무엇인지, 사용하는 이유는 무엇이고 Set의 메소드에는 뭐가 있는지 알아보겠습니다.


목차


자바 Set이란??

Set은 중복되지 않는 값들을 저장하는 인터페이스입니다. Set의 요소의 순서는 특정한 정렬 기준을 따르지 않습니다. Set을 구현하는 대표적인 클래스들은 HashSet, TreeSet, LinkedHashSet 등이 있습니다.


Set의 특징

  • 추가한 데이터가 순서대로 저장되지 않음
  • 수정 가능
  • 데이터 중복이 없다. 동일한 값이 추가되면 저장되지않음
  • FastLookup이 필요할 때 주로 쓰임

Set을 왜 사용할까??

  • 고유성 보장:
    데이터를 추가하기 전에 중복 항목을 제거한다.
  • 수학적 집합 연산 가능
    Set은 수학적 집합 연산(합집합, 교집합)을 편하게 할 수 있는 메서드가 포함되어 있습니다.
  • 효율적인 데이터 테스트
    Set는 해싱을 사용하여 요소를 구성하므로 Set 내 항목의 존재 여부를 테스트하는 것이 매우 효율적입니다.
  • 데이터 구조 구현
    Set은 기본 Set 인터페이스를 기반으로 특정 기능을 제공합니다. 예를 들어 HashSet은 빠른 액세스를 위해 해싱을 사용하는 반면 TreeSet은 정렬된 순서로 요소를 유지합니다.
  • List에서 중복 제거
    중복 요소를 포함할 수 있는 List를 처리할 때 List를 Set으로 변환하고 다시 List로 변환하면 중복 요소를 제거하고 요소의 순서를 유지할 수 있습니다.

자바 Set의 메소드


요소 추가

  • boolean add(E e) : 데이터의 중복확인 후 Set에 요소를 추가합니다.

요소 제거

  • boolean remove(Object o) : 지정된 요소가 있는 경우 Set에서 제거합니다.
  • void clear() : 모든 요소를 제거합니다.

요소 확인

  • boolean contains(Object o): Set에 지정된 요소가 포함되어 있으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
  • boolean isEmpty(): Set에 요소가 없으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  • int size(): 집합의 요소 수를 반환합니다.

요소 반복

  • Iterator<E> iterator(): Set의 요소에 대한 iterator를 반환합니다. 요소는 특정 순서로 반환되는 것이 보장되지 않습니다.

예시

        Set<String> set = new HashSet();

    	 set.add("Apple");
         set.add("Banana");
         set.add("Orange");
         set.add("Apple"); // 중복된 요소

         System.out.println("contains 'Banana': " + set.contains("Banana")); // Output: true
         set.remove("Orange");
         System.out.println("Number of elements : " + set.size()); // Output: 2
         System.out.println();
         System.out.println("Elements in :");
         
         
         Iterator<String> iterator = set.iterator();
         while (iterator.hasNext()) {
             System.out.println(iterator.next());
         }
         System.out.println();

<결과>

위에서 말한 요소 추가, 제거, 확인, 반복에 대한 메소드를 사용해서 예시를 만들어봤습니다.


자바 Set 인터페이스

set 인터페이스

Set 인터페이스는 Java Collections Framework에서 사용할 수 있는 다양한 Set 구현이 있습니다. 자바 Set의 세 가지 구현 클래스를 살펴보겠습니다.

HashSet

HashSet은 가장 일반적으로 사용되는 Set 구현 중 하나입니다. 해시 테이블을 사용하여 요소의 빠른 액세스, 삽입 및 삭제를 제공합니다. HashSet은 해당 요소에 대한 특정 순서를 유지하지 않습니다. 해싱을 사용하기 때문에 요소의 순서를 예측할 수 없습니다.


추가로 HashSet에 대해서 더 궁금하시다면 여기를 클릭해주세요.


TreeSet

TreeSet은 정렬된 순서로 요소를 유지 관리하는 Set 구현입니다. 자체 균형 이진 검색 트리(일반적으로 레드-블랙 트리)로 구현됩니다. 결과적으로 요소는 항상 오름차순으로 저장됩니다. TreeSet은 null 값을 허용하지 않으며 모든 요소는 비교 가능하거나 Comparable 인터페이스를 구현해야 합니다.


추가로 TreeSet에 대해서 더 궁금하시다면 여기를 클릭해주세요.


LinkedHashSet

LinkedHashSet은 해시 테이블 외에 이중으로 연결된 요소 목록을 유지 관리하는 HashSet의 확장입니다. LinkedHashSet은 요소가 삽입된 순서대로 반복되도록 하여 예측 가능한 반복 순서를 제공합니다. LinkedHashSet은 null 값을 허용하고 하나의 null 요소만 허용합니다.


마무리

자바 Set는 고유한 요소의 정렬되지 않은 콜렉션을 제공합니다. 데이터 무결성, 빠른 요소 검색 및 수학적 집합 연산 지원을 제공합니다. 다른 Collection 인터페이스와의 호환성과 함께 다양한 Set 구현을 통해 개발자는 Set을 특정 요구 사항에 맞게 조정할 수 있습니다.

  • 자바 boolean에 대해서 궁금하시다면 여기를 클릭해 주세요.
  • 자바 final에 대해서 궁금하시다면 여기를 클릭해 주세요.
  • 최신 자바 프레임 워크가 궁금하시다면 여기를 클릭해 주세요.

Leave a Comment