본문 바로가기

자바

자바 Set

1. Set 이란? 

   - Set은 순서가 없고, 중복 값을 허용하지 않는 특정한 값을 저장한다.

   - 집합이란 의미를 가진다.

 

2. Set의 특징

   - 동일한 값을 중복해서 저장하지 않으므로, 중복된 값들이 필요없는 경우 사용한다. 

   - 요소들의 순서를 저장하지 않는다. 따라서 인덱스를 사용하여 요소에 접근하는 것이 불가능하다.

   - Set 구현 클래스: HashSet, TreeSet, LinkedHashSet 등이 있다.

 

3. Set의 종류

   - HashSet:  해시 테이블을 기반으로 요소들을 저장한다.

                      순서를 보장하지 않으며, 가장 빠른 검색 시간을 가지고 있다. 하지만 요소들의 순서를 예측할 수 없다.

                      만약, 순서가 중요한 경우 LinkedHashSet을 사용한다.

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

public class HashSetExample {
    public static void main(String[] args) {
        // HashSet 객체 생성
        Set<String> hashSet = new HashSet<>();

        // 데이터 추가
        hashSet.add("Apple");
        hashSet.add("Banana");
        hashSet.add("Orange");
        hashSet.add("Grape");
        hashSet.add("Apple"); // 중복 데이터는 추가되지 않음

        // 데이터 출력
        for (String fruit : hashSet) {
            System.out.println(fruit);
        }

        // 데이터 포함 여부 확인
        System.out.println("Contains Banana: " + hashSet.contains("Banana"));

        // 데이터 삭제
        hashSet.remove("Orange");

        // 데이터 크기 확인
        System.out.println("Number of elements: " + hashSet.size());

        // 모든 데이터 제거
        hashSet.clear();

        // 비어있는지 확인
        System.out.println("Is HashSet empty? " + hashSet.isEmpty());
    }
}

/* 출력
Apple
Grape
Banana
Orange
Contains Banana: true
Number of elements: 3
Is HashSet empty? true
/*


   - TreeSet: 이진 검색 트리를 기반으로 요소들을 저장하는 Set 구현 클래스다.

                    요소들이 정렬된 상태로 저장되어 검색과 범위 검색 연산이 빠르지만,

                    삽입과 삭제에는 오버헤드가 발생할 수 있다.

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // TreeSet 객체 생성
        Set<String> treeSet = new TreeSet<>();

        // 데이터 추가
        treeSet.add("Apple");
        treeSet.add("Banana");
        treeSet.add("Orange");
        treeSet.add("Grape");
        treeSet.add("Apple"); // 중복 데이터는 추가되지 않음

        // 데이터 출력 (정렬된 순서로 출력)
        for (String fruit : treeSet) {
            System.out.println(fruit);
        }

        // 데이터 포함 여부 확인
        System.out.println("Contains Banana: " + treeSet.contains("Banana"));

        // 데이터 삭제
        treeSet.remove("Orange");

        // 데이터 개수 확인
        System.out.println("Number of elements: " + treeSet.size());

        // 모든 데이터 제거
        treeSet.clear();

        // 비어있는지 확인
        System.out.println("Is TreeSet empty? " + treeSet.isEmpty());
    }
}

/* 출력
Apple
Banana
Grape
Orange
Contains Banana: true
Number of elements: 3
Is TreeSet empty? true
/*


   - LinkedHashSet: 요소들의 순서를 보장하는 Set 구현 클래스다.

                                HashSet과 유사하지만 내부적으로 연결 리스트를 사용하여 요소들의 순서를 찾을 수 있다.

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        // LinkedHashSet 객체 생성
        Set<String> linkedHashSet = new LinkedHashSet<>();

        // 데이터 추가
        linkedHashSet.add("Apple");
        linkedHashSet.add("Banana");
        linkedHashSet.add("Orange");
        linkedHashSet.add("Grape");
        linkedHashSet.add("Apple"); // 중복 데이터는 추가되지 않음

        // 데이터 출력 (추가된 순서대로 출력)
        for (String fruit : linkedHashSet) {
            System.out.println(fruit);
        }

        // 데이터 포함 여부 확인
        System.out.println("Contains Banana: " + linkedHashSet.contains("Banana"));

        // 데이터 삭제
        linkedHashSet.remove("Orange");

        // 데이터 개수 확인
        System.out.println("Number of elements: " + linkedHashSet.size());

        // 모든 데이터 제거
        linkedHashSet.clear();

        // 비어있는지 확인
        System.out.println("Is LinkedHashSet empty? " + linkedHashSet.isEmpty());
    }
}

/* 출력
Apple
Banana
Orange
Grape
Contains Banana: true
Number of elements: 3
Is LinkedHashSet empty? true
*/

'자바' 카테고리의 다른 글

자바 String이 메모리에 저장되는 방식  (0) 2023.07.24
자바 Map  (0) 2023.07.24
자바 동기화  (0) 2023.07.24
자바 Queue  (0) 2023.07.24
자바 Stack  (0) 2023.07.24