Back-Language/Java

[Java] 중복을 허용하지 않는 컬렉션 - SET

200scs 2024. 7. 16. 21:04

안녕하세요!
다들 뭐하고 지내시나요?
저는 요새 백준 온라인 저지를 통한 코딩 테스트에 매료되어 있습니다 :)

백준 온라인 저지 문제를 풀다보니 조건 중 "~~보다 작거나 같은 자연수이며, 중복되지 않는다"와 같은 조건이 많았습니다.

여기서 "~~보다 작거나 같은", "자연수이며"와 같은 조건은 부등호, 자료형으로 충분히 해결할 수 있는 조건이지만, "중복"에 관한 것은 몇번의 반복문 혹은 조건문으로 떡칠해야 가능하죠...

하지만 Java에서는 중복을 허용하지 않는 자료형을 이미 구현해놨습니다.

이번에는 '중복을 허용하지 않는 자료형' Set에 대해 알아보려 합니다.

Set?

먼저 Set에 대한 개념을 알아보겠습니다.

Set은 '중복을 허용하지 않는' 특징 포함하여 아래의 특징을 갖고 있습니다.

  • 중복을 허용하지 않는다!
  • 원소의 순서를 무시한다!

Set, 파헤쳐보자.

  • Set은 java.util 패키지에 속합니다.
  • 중복된 값을 저장하지 않습니다.
  • 순서가 없습니다.
  • Set도 interface 입니다!

Set의 구현 클래스

  • HashSet
    • 해시 테이블을 사용하여 Set을 구현.
    • 가장 빠른 검색 속도를 제공
  • TreeSet
    • 이진 검색 트리를 사용하여 Set을 구현.
    • 원소를 정렬된 순서로 유지.
  • LinkedHashSet
    • 연결된 해시 테이블로 Set을 구현.
    • 원소의 삽입 순서를 유지.

자 예시 한번 봅시다!

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

public class Main {
    public static void main(String[] args) {
        // HashSet 생성(Set은 직접 인스턴스화 할 수 없기 때문에 구현 클래스 중 하나를 사용)
        Set<String> set = new HashSet<>(); // `Set` 인터페이스를 통해 `HashSet`을 참조

        // 요소 추가
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Banana"); // 중복된 요소는 추가되지 않음

        // Set의 크기 출력
        System.out.println("Set size: " + set.size()); // -> Set size: 3

        // Set의 요소 출력
        System.out.println("Set contains:");
        for (String item : set) {
            System.out.println(item); // Apple Banana Orange
        } /* 출력 결과 (순서는 다를 수 있음)
            * Set contains:
            * Apple
            * Orange
            * Banana
            */

        // 요소 검사
        if (set.contains("Apple")) {
            System.out.println("Set contains Apple.");// Set contains Apple
        }

        // 요소 제거
        set.remove("Apple");

        // 제거 후 Set의 요소 출력
        System.out.println("After removing Apple, set contains:");
        for (String item : set) {
            System.out.println(item);
        } /* 출력 결과 (순서는 다를 수 있음):
            * After removing Apple, set contains:
            * Orange
            * Banana
            */
    }
}

간단한 예제를 통해 Set 인터페이스에 구현된 메소드들도 살펴보았습니다.

이해 안 되는 부분을 댓글로 남겨주시면 빠른 응답하도록 하겠습니다!