Java 언어에서 set을 구현한 클래스는 HashSet과 TreeSet, LinkeHashSet이 있다.
LinkeHashSet은 저장 순서를 유지할 수 있다는 특징이 있다.
HashSet VS TreeSet
HashSet | TreeSet | |
구현방식 | 해싱 | 이진탐색트리(레드-블랙트리) |
속도 | 빠름 | 느림 |
정렬기능 | 정렬불가 | 정렬가능 |
특징 | 중복 허용하지 않음, 순서가 없음 |
HashSet과 TreeSet의 특징을 비교한 그래프이다.
가장 성능이 좋은 HashSet에 대해 알아보자.
HashSet
HashSet 클래스는 HashMap 인스턴스에서 지원하는 Set 인터페이스를 구현한다.
(Set의 성질을 그대로 상속 받는다!)
다음과 같은 성질을 가지고 있다.
- 집합의 중복을 허용하지 않습니다.
- 순서가 일정하게 유지된다는 보장이 없습니다.
- 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
'알고리즘 > Java' 카테고리의 다른 글
프로그래머스 A로 B 만들기(Java) - HashMap, putIfAbsent, put (0) | 2023.08.30 |
---|---|
(Java) 문자의 배열과 아스키코드, StringBuilder 사용법 (0) | 2023.07.20 |