IT/JAVA

HashSet

iamhyeon 2025. 3. 20. 23:21

HashSet 은 Set 인터페이스에서 지원하는 구현 클래스이다. 

=> Set의 특징을 그대로 상속받는다.

 



✏️ Set

- Java에서 중복을 허용하지 않는 컬렉션을 나타내는 인터페이스 

- Key의 중복을 허용하지 않는다

- Key로 null을 허용하지 않는다. 

- 중복을 자동으로 제거해준다.

- 비선형 구조로 순서 없이 Key로만 데이터를 저장한다. => 인덱스X

- 요소의 저장 순서를 유지해야 한다면 JDK1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 된다.

- 성능이 빠르고 검색 속도가 우수하다
- 추가나 삭제시 Set 내부에 있는지 검색한 뒤 해야하므로 List구조에 비해 속도가 느리다 

 

주요 구현 클래스

  • HashSet :  가장 많이 사용되는 Set 구현체 (빠른 검색 속도, 순서X) 
  • TreeSet :  정렬된 상태로 요소를 저장한다 (기본 오름차순) => 자동 정렬 필요할 때
  • LinkedHashSet :  HashSet과 유사하지만 입력한 순서를 유지한다 => 순서 유지해야 할 때

✏️ HashSet

- Set 인터페이스를 구현한 클래스

- 중복을 허용하지 않고 순서를 보장하지 않는 컬렉션
- 내부적으로 HashMap을 사용하여 데이터를 저장하며, 빠른 검색 속도를 제공한다 
- null 값 허용

 

HashSet 주요 메서드 

메서드 설명
add(E e) 요소 추가 (중복 시 추가되지 않음)
remove(Object o) 특정 요소 제거
contains(Object o) 요소 포함 여부 확인
size() 현재 저장된 요소 개수 반환
clear() 모든 요소 삭제
isEmpty() Set이 비어있는지 확인

 

HashSet vs TreeSet vs LinkedHashSet 비교

 

  HashSet TreeSet LinkedHashSet
중복 허용
정렬 여부 ❌  ⭕ (기본 오름차순)
삽입 순서 유지 ❌  ❌ 
내부 구현 HashMap TreeMap  LinkedHashMap 
검색 속도 빠름 느림 (정렬 비용) 빠름

 

ex) 

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
    public static void main(String[] args) {
        // HashSet 선언
        Set<String> fruits = new HashSet<>();

        // 요소 추가
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        // 중복 요소 추가 (허용되지 않음)
        fruits.add("Apple"); 

        // 요소 출력
        System.out.println("저장된 과일들: " + fruits);	
        // 출력>> 저장된 과일들: [Banana, Apple, Cherry]

        // 특정 요소 존재 여부 확인
        System.out.println("Banana 포함 여부: " + fruits.contains("Banana"));
		// 출력>> Banana 포함 여부: true

        // 요소 제거
        fruits.remove("Cherry");

        // 요소 개수 확인
        System.out.println("Set 크기: " + fruits.size());
        // 출력>>Set 크기: 2

        // 모든 요소 제거
        fruits.clear();
        System.out.println("Set 비어있는지 확인: " + fruits.isEmpty());
        // 출력>> Set 비어있는지 확인: true
    }
}

 

 


refer to

https://myeongju00.tistory.com/56

 

 

반응형

'IT > JAVA' 카테고리의 다른 글

ArrayList vs LinkedList  (0) 2025.04.08
코드 실행시간 비교  (0) 2025.03.26
Pattern, Matcher Class  (0) 2025.02.25
StringBuilder  (0) 2025.01.19
IntStream  (0) 2025.01.04