Java

[Java] HashSet

비번변경 2026. 2. 13. 16:01

개요

2026.02.06-[Java] HashMap에서 HashMap에 대해서 살펴보았는데, 이번 글에서는 Set을 구현한 HashSet에 대해서 살펴본다.

 

 

HashSet

이름에서 추측할 수 있듯, HashSet은 Set 인터페이스를 구현한 클래스이다. 객체를 중복 저장할 수 없고 저장 순서를 유지하지 않는다는 Set의 성질을 그대로 이어받는다. 만약 순서를 유지해야 하거나 자동 정렬이 필요한 경우에는 LinkedHashSet, TreeSet과 같은 다른 구현 클래스를 사용하면 된다.

Set은 중복을 허용하지 않기 때문에 보통 중복을 제거하기 위해 많이 활용한다. 또한 비선형 구조로 인덱스가 존재하지 않기 때문에 값을 추가하거나 삭제할 때에는 Set에 값이 있는지 확인할 필요가 있기 때문에 List에 비해 다소 느리다.

 

중복 제거 방법

1. 객체를 저장하기 전 객체의 hashCode 메서드를 호출해 해시코드를 얻은 후 저장되어 있는 객체의 해시코드와 비교한다.

2. 같은 해시코드가 있다면 equals 메서드로 두 객체를 비교하여 true이면 동일한 객체로 판단하여 저장하지 않는다.

 

 

사용법

선언

인자로 키와 값 타입을 전달하며 기본생성자를 호출한다. 저장공간보다 값이 추가로 들어오면 공간을 늘리는데, 두 배씩 늘리기 때문에 저장할 데이터의 개수를 알고 있다면 초기 용량을 지정하는 것이 좋다.

import java.util.HashSet;

HashSet<Integer> set = new HashSet<Integer>();
HashSet<Integer> set = new HashSet<>();

# 초기 용량 지정
HashSet<Integer> set = new HashSet<Integer>(10);

 

값 추가

add 메서드를 사용해 Set에 값을 추가한다. 만약 기존재하는 값을 추가하려고 시도하면 false를 반환한다.

set.add(VALUE);

 

값 삭제

remove 메서드를 사용해 특정 값을 Set에서 삭제할 수 있다. 만약 없는 값을 삭제하려고 시도하면 false를 반환한다. Set 내 모든 값을 제거할 때는 clear를 사용한다.

 

set.remove(VALUE);

# 비우기
set.clear();

 

 

Set 크기

Set의 크기를 확인할 때는 size 메서드를 사용한다.

set.size();

 

값 존재 여부 확인

원하는 값이 Set 내에 존재하는지 확인하고 싶다면 contains 메서드를 사용한다. 존재하면 true를, 그렇지 않다면 false를 반환한다.

set.contains(VALUE);

 

 

순회

Set을 순회할 때는 반복자(iterator)를 활용한다. iterator 객체를 생성한 후, hasNext, next 메서드를 사용해 하나씩 값의 존재 여부를 확인하고 값을 가져올 수 있다.

HashSet<Integer> set = new HashSet<>();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

 

 

 

 

참고 문서

https://coding-factory.tistory.com/554

 

 

 

728x90