Set Collection에 대해서

2019-09-11

Set Collection?

List 컬렉션은 저장 순서를 유지하지만, Set 컬렉션은 저장 순서를 유지하지 않는 데이터의 집합으로 중복을 허용하지 않는다.

대표적인 클래스는 다음과 같다.

  1. HashSet
  2. LinkedHashSet
  3. TreeSet

HashSet클래스

Set<E> hs = new HashSet<E>();

HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이다. JDK 1.2부터 제공된 HashSet 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.(가장 성능이 좋음)

HashSet은 Set의 성격대로 순서상관없이 저장되고, 중복 저장이 되지 않는다.

HashSet은 데이터를 저장하기전에 해당 요소에서 HashCode() 메소드를 호출해서 반환된 해시값으로 검색할 범위를 결정한다. 그리고 해당 범위 내의 요소들을 equals() 메소드로 비교한다. true가 나오면 동일한 요소로 판단하고 중복 저장을 하지 않는다.

이 때 사용하는 hashCode()equals() 코드는 자신이 정의한 클래스 인스턴스에 대해 프로그래머가 직접 오버라이딩하여 구현할 수 있다.


해시 알고리즘(hash algorithm)

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

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

저장할 key값과 value를 넣으면 해시함수는 int index = key.hashCode() % capacity 연산으로 배열의 인덱스를 구하여 해당 인덱스에 저장된 연결 리스트에 데이터를 저장하게 된다.

HashAlgo

예를 들어, key = 10이라면, hashCode() 메소드가 해당하는 key값을 그대로 반환하며, 10크기의 배열이 존재하므로 이 key의 인덱스는 10%10 = 0 이 된다. 따라서 첫번째 요소에 연결된 연결 리스트에서 검색을 시작한다.


TreeSet클래스

Set<E> ts = new TreeSet<E>();

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

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

JDK 1.2부터 제공되는 TreeSet 클래스는 NavigableSet 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현한다.


Set Interface Method

Set 인터페이스에서 제공하는 주요 메소드는 다음과 같다.

SetMethod


참조

이것이 자바다 http://tcpschool.com/java/java_collectionFramework_set https://joooootopia.tistory.com/13