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 |