[JavaStudy] 2. Set 컬렉션 클래스

진주·2022년 3월 9일
0

JavaStudy

목록 보기
2/9

🌻 Set 컬렉션 클래스

  1. 요소의 저장 순서를 유지하지 않는다.
  2. 같은 요소의 중복 저장을 허용하지 않는다.
  • HashSet
  • TreeSet

🍖 HashSet 클래스

HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용하는 클래스 중 하나이다.

HashSet 클래스는 Set 인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.

만약, 요소의 저장 순서를 유지해야 한다면, LinkedHashSet 클래스를 사용하면 된다.

[예제1]

import java.util.HashSet;

public class _6_Hash_study {

    public static void main(String[] args) {
    	// HashSet 생성
        HashSet<String> hs01 = new HashSet<String>();

        // add() : 요소 저장
        hs01.add("Hash");
        hs01.add("Java");
        
        // 중복된 요소는 저장할 수 없다
        System.out.println(hs01.add("Python")); // ① true
        System.out.println(hs01.add("Python")); // ② false : 중복된 요소 저장 X

        // ForEach, get()을 이요한 요소 출력
        for(String s : hs01){
            System.out.print(s+ " ");	
            // ③ Java Hash Python
        }
    }
}

[결과]


[예제2]

import java.util.HashSet;
import java.util.Iterator;

public class _6_Hash_study {

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

        hs02.add("Python");
        hs02.add("Hash");
        hs02.add("Java");

        // iterator() : 요소출력
        Iterator<String> iter02 = hs02.iterator();
        while(iter02.hasNext()){
            System.out.print(iter02.next()+ " ");
        }

        // size() : 요소의 총 개수
        System.out.println("집합의 크기 : " + hs02.size());
        }
    }

[결과]


🍘 정리

위의 예제에서 요소의 저장 순서를 바꿔도 저장되는 순서에는 영향을 미치지 않는 것을 확인할 수 있다.

add() 메소드를 사용하여 해당 HashSet에 이미 존재하는 요소를 추가하려고 하면, 해당 요소를 저장하지 않고 false를 반환하는 것을 볼 수 있다.


🥞 해시 알고리즘(hash algorithm)

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

자바에서 해시 알고리즘을 이용한 자료 구조는, 위의 그림과 같이 배열과 연결 리스트로 구현된다.

저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구한다. 그리고 해당 인덱스에 저장된 연결 리스트에 데이터를 저장하게 된다.


🥪 TreeSet 클래스

Treeset 클래스는 데이터가 정렬된 상태로 저장되는 이진 검색 트리(binary search tree)의 형태로 요소를 저장한다.

이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.

TreeSet 클래스는 Set인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값을 저장하지 않는다.

[예제]

import java.util.Iterator;
import java.util.TreeSet;

public class _6_TreeSet_study {

    public static void main(String[] args) {
        // TreeSet 객체 생성
        TreeSet<Integer> ts = new TreeSet<Integer>();

        // add() : 요소 저장
        ts.add(30);
        ts.add(40);
        ts.add(20);
        ts.add(10);

        // foreach문을 이용한 요소 출력
        for(int e : ts){
            System.out.print(e + " ");
        }

        // remove() : 요소 제거
        ts.remove(40);


        // iterator() : 요소 출력
        Iterator<Integer> iter = ts.iterator();
        while(iter.hasNext()){
            System.out.print(iter.next()+ " ");
        }
        

        // size() : 요소 총 개수 구하기
        System.out.println("이진 검색 트리의 크기 : " + ts.size());

    }
}

[결과]


🍕 Set 인터페이스 메소드

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

profile
진주의 코딩일기

0개의 댓글