본문 바로가기
백엔드/자바

컬렉션 클래스 - Set

by study_yeon 2023. 8. 24.

2023.08.22 - [백엔드/자바] - 컬렉션 프레임워크( Collection Framework )

 

컬렉션 프레임워크( Collection Framework )

더보기 컬렉션 프레임워크가 어떤 역할을 하는지는 알았으나 각각의 인터페이스와 클래스가 어떤 것이 있는지, 그 클래스는 어떤용도로 사용되는지에 익숙하지 않아 수업에 어려움이 있어 다

dustj0824.tistory.com

 

◎ 컬렉션 클래스(collection class)

- 컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스
- List와 Set, Map 인터페이스 중 하나의 인터페이스를 구현
- 클래스 이름에 구현한 인터페이스의 이름이 포함

 

▶ Set 컬렉션 클래스

- Set(집합)

- 요소의 저장 순서를 유지하지 않음
- 같은 요소의 중복 저장을 허용하지 않음 


1. HashSet<E>
- 가장 많이 사용되는 클래스 
- 해시 알고리즘을 사용
- 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장
- 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다

- 데이터가 정렬되어있을 필요도 없고, 빠르게 중복되는 값인지만 찾으면 될 때 유용
- add() 메소드를 사용하여 해당 HashSet에 이미 존재하는 요소를 추가하려고 하면, 해당 요소를 저장하지 않고 false를 반환

HashSet<String> hs01 = new HashSet<String>();

 

* HashSet에 이미 존재하는 요소인지를 파악하는 법 
1. 해당 요소에서 hashCode() 메소드를 호출하여 반환된 해시값으로 검색할 범위를 결정
2. 해당 범위 내의 요소들을 equals() 메소드로 비교
-> add() 메소드를 사용하여 중복 없이 새로운 요소를 추가하기 위해서는
     hashCode()와 equals() 메소드를 상황에 맞게 오버라이딩

(참고)

'중복은 허용하지 않으면서 순서를 보장받고 싶은경우'에 LinkedHashSet 사용


2. TreeSet<E>
- 데이터가 정렬된 상태로 저장되는 이진 검색 트리(binary search tree)의 형태로 요소를 저장
- TreeSet 인스턴스에 저장되는 요소들은 모두 정렬된 상태로 저장 
-  NavigableSet 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현
- 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다

- 중복되지 않으면서 특정 규칙에 의해 정렬된 형태의 집합을 쓰고 싶을 때 유용
- 특정 구간의 집합요소들을 탐색할 때 유용

TreeSet<Integer> ts = new TreeSet<Integer>();


※ 주요 메소드
subSet() : 동작이 가능한 해당 트리의 부분 집합만을 보여줌 

public NavigableSet<E> subSet(E fromElement, E toElement)

-> 첫 번째 값 부터 두 번째 값의 바로 직전 요소까지를 반환

public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)

-> 두 번째와 네 번째 매개변수(boolean)로 각각 첫 번째와 세 번째 매개변수로 전달된 값에 해당하는 요소를 포함할 것인지 아닌지를 명시

 


* 해시 알고리즘(hash algorithm)

- 해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘
- 매우 빠르게 검색 작업을 수행 가능 
- 해시 알고리즘을 이용한 자료 구조는 배열과 연결 리스트로 구현




 

참고

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

 

'백엔드 > 자바' 카테고리의 다른 글

컬렉션 클래스 - Map  (0) 2023.08.24
컬렉션 클래스 - List  (0) 2023.08.24
컬렉션 프레임워크( Collection Framework )  (0) 2023.08.22
자바 - 29 (Stream)  (0) 2023.06.12
자바 - 28 (재귀(Recursion) 알고리즘)  (0) 2023.06.08