Java

[Java] Set 컬렉션 클래스

junga 2022. 9. 25. 18:52

Set 컬렉션 클래스의 특징


  • 요소의 저장 순서가 없다.
  • 요소의 중복을 허용하지 않는다.


대표적인 클래스

  1. HashSet<\E>
  2. TreeSet<\E>


HashSet


  • 가장 많이 사용되는 클래스로, 해시 알고리즘을 사용하여 검색 속도가 빠르다.
  • 만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하자.


import java.util.HashSet;


public class Main {
    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<>();

        // add(): 요소 저장
        hs.add("해시");
        hs.add("셋");
        hs.add("hash");
        hs.add("set");
        hs.add("set");


        for (String s :  hs) {
            System.out.println(s);
        }
        // 해시
        // set
        // 셋
        // hash

        // 순서도 다르고, "set"을 중복으로 추가했지만 하나만 존재한다.
    }
}


해시 알고리즘(hash algorithm)


  • 해시 함수(hash function)를 사용하여
  • 데이터를 해시 테이블(hash table)에 저장하고,
  • 검색할 수 있는 알고리즘이다.


http://www.tcpschool.com/java/java_collectionFramework_set



자바에서 해시 알고리즘을 이요한 자료구조는 배열과 연결리스트로 구현된다.
저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구하고,
해당 인덱스에 저장된 연결리스트에 데이터를 저장한다.



TreeSet


  • 데이터가 정렬된 상태로 저장되는 "이진 검색 트리(binary search tree)" 형태로 요소를 저장한다.
  • Set 인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.


import java.util.TreeSet;


public class Main {
    public static void main(String[] args) {
        TreeSet<Integer> hs = new TreeSet<>();

        // add(): 요소 저장
        hs.add(10);
        hs.add(3);
        hs.add(6);
        hs.add(1);
        hs.add(15);


        for ( Integer n :  hs) {
            System.out.print(n + " "); 
            // 1 3 6 10 15 
            // 요소들은 모두 정렬된 상태로 저장된다.
        }
    }
}


Set 인터페이스 주요 메소드


  • Set 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드도 모두 사용이 가능하다.


'Java' 카테고리의 다른 글

[Java] String VS StringBuffer  (0) 2022.10.01
[Java] Map 컬렉션 클래스  (0) 2022.09.28
[Java] Deque  (0) 2022.09.24
[Java] Stack & Queue  (0) 2022.09.23
[Java] List 컬렉션 클래스  (0) 2022.09.21