본문 바로가기
알고리즘/Java

[Java 언어] HashSet

by eunjineee 2023. 8. 15.

Java 언어에서 set을 구현한 클래스는 HashSet과 TreeSet, LinkeHashSet이 있다.

LinkeHashSet은 저장 순서를 유지할 수 있다는 특징이 있다.

HashSet   VS   TreeSet

  HashSet TreeSet
구현방식 해싱 이진탐색트리(레드-블랙트리)
속도 빠름 느림
정렬기능 정렬불가 정렬가능
특징  중복 허용하지 않음, 순서가 없음

HashSet과 TreeSet의 특징을 비교한 그래프이다.

가장 성능이 좋은 HashSet에 대해 알아보자.

 

HashSet 

HashSet 클래스는 HashMap 인스턴스에서 지원하는 Set 인터페이스를 구현한다.

(Set의 성질을 그대로 상속 받는다!)

 

다음과 같은 성질을 가지고 있다.

  1. 집합의 중복을 허용하지 않습니다.
  2. 순서가 일정하게 유지된다는 보장이 없습니다.
  3. null 요소를 허용합니다. (null을 값으로 허용)

 

더보기

Constructor Summary (생성자 요약)

 

HashSet()
- 비어 있는 새 집합을 생성
- 백업 HashMap 인스턴스에는 기본 초기 용량(16)과 부하 계수(0.75)가 있음
HashSet(Collection<? extends E> c)
- 지정된 컬렉션의 요소를 포함하는 새로운 set을 구축함
HashSet(int initialCapacity)
- 비어 있는 새 집합을 생성합
- 백업 HashMap 인스턴스에는 지정된 초기 용량과 기본 부하 계수(0.75)가 있음
HashSet(int initialCapacity, float loadFactor)
- 비어 있는 새 집합을 생성
- 백업 HashMap 인스턴스에는 지정된 초기 용량과 지정된 로드 비율이 있음

 

 

HashSet 사용법

 

1. iterator

모든 객체 순회

Set<String> day = new HashSet<String>();
day.add("morning");
day.add("night");

Iterator<String> i = day.iterator();
while (i.hashNext())
    System.out.println("day: " + i.next());
day: night
day: morning

 

2. size

Hash의 크기 구하기

Set<String> day = new HashSet<String>(Arrays.asList("morning","night");

System.out.println(day.size());
// 크기 = 2

 

3. isEmpty

Hash가 비어있는지 확인

Set<String> day = new HashSet<String>(Arrays.asList("morning","night");

System.out.println(day.isEmpty());
// 비어 있는지 : false

 

4. contains

Hash가 해당 객체를 가지고 있는지 확인

Set<String> day = new HashSet<String>(Arrays.asList("morning","night");

System.out.println(day.contains("night"));
// "night"포함 여부 : true

 

5. add

Hash에 객체를 추가하는 방법

Set<String> day = new HashSet<String>();
day.add("morning");
day.add("night");

 

6. remove

Hash의 값을 지우는 방법

Set<String> day = new HashSet<String>(Arrays.asList("morning","night");

day.remove("night");
// "night" 값 제거

System.out.println(day.size());
//제거 후 Hash 크기 1

 

7. clear

Hash의 모든 값을 지우는 방법

Set<String> day = new HashSet<String>(Arrays.asList("morning","night");

day.clear();
// hash의 모든 값 제거

System.out.println(day.size());
//제거 후 Hash 크기 0