집합과 해싱 - java.util.HashSet

이현빈·2025년 2월 26일
0

1. java.util.HashSet 개괄

  • Set 인터페이스를 구현한 컬렉션 클래스
    : 중복된 데이터의 저장을 허용하지 않고, 저장 순서도 유지하지 않음
    (저장 순서를 유지하려면 java.util.LinkedHashSet을 이용)
  • 내부적으로 java.util.HashMap을 이용하여 구현
  • 저장된 객체의 중복 여부는 객체의 hashCode() 메서드로 구한 해시코드값으로 판별
    : 해시코드값이 중복되는 경우가 많아질수록 검색 속도 하락

연관된 인터페이스/클래스

java.util.HashSet의 조상 인터페이스

java.util.Set 인터페이스

  • 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스(이하 집합 클래스)를 구현하는 데 사용되는 인터페이스

java.lang.Cloneable

  • 이 인터페이스를 구현한 클래스의 인스턴스는 Object clone() 메서드를 통해 복제될 수 있음

java.io.Serializable

  • 이 인터페이스를 구현한 클래스의 인스턴스는 직렬화될 수 있음

cf) java.lang.Cloneablejava.io.Serializable는 마커 인터페이스
: 해당 인터페이스를 사용하는 클래스에 관한 추가 정보를 제공하는 용도로 쓰이는 빈 인터페이스

java.util.HashSet의 상위 인터페이스

java.util.AbstractCollection

  • 컬렉션 클래스의 기본 골격을 제공하기 위한 추상 클래스
  • Collection 인터페이스에 정의된 일부 메서드를 구현

java.util.AbstractSet 추상 클래스

  • 컬렉션 클래스의 자손인 집합 클래스의 기본 골격을 제공하기 위한 추상 클래스
  • Set 인터페이스에 정의된, 집합 클래스의 주요 기능을 구현

2. java.util.HashSet의 주요 메서드

cf1) java.util.HashSet의 모든 메서드는 여기에서 확인 가능
cf2) java.util.HashSet은 내부적으로 java.util.HashMap을 사용하여 구현


생성자

HashSet()

  • HashSet의 기본 생성자

HashSet(Collection c)

  • 주어진 컬렉션의 객체들을 포함하는 HashSet 객체를 생성

HashSet(int initialCapacity, float loadFactor)

  • 주어진 값들을 초기 용량과 load factor로 삼는 HashSet 객체를 생성

HashSet(int initialCapacity)

  • 주어진 값을 초기용량으로 하는 HashSet 객체를 생성

cf) load factor
: 컬렉션 클래스에서 용량을 확보하는 작업을 미리 수행하게 되는 임계점이 되는 0 이상 1 이하의 실수값으로, 기본값은 0.75
(예: load factor의 값이 0.8이면 저장공간의 80%가 채워졌을 때 용량이 2배 증가)


데이터 포함 여부 확인

boolean contains(Object o)

  • HashSet이 지정된 객체를 포함하고 있는지를 확인

boolean containsAll(Collection c)

  • 지정된 컬렉션에 저장된 모든 객체를 HashSet이 포함하고 있는지를 확인
  • java.util.AbstractCollection에서 구현된 메서드를 그대로 사용

데이터 추가/삭제

객체 단위 추가/삭제

boolean add(Object o)

  • 지정한 객체를 HashSet에 저장
  • 이미 동일한 객체가 저장되어 있을 시 중복으로 간주하고 false를 반환
    : 중복 여부의 판별은 객체의 hashCode() 메서드에 의해 만들어진 해시코드값을 활용

boolean remove(Object o)

  • 지정한 객체를 HashSet에서 삭제

컬렉션 단위 추가/삭제

boolean addAll(Collection c)

  • 주어진 컬렉션에 저장된 객체들을 HashSet에 저장
  • 합집합 연산과 동일
  • java.util.AbstractCollection에서 구현된 메서드를 그대로 사용

boolean removeAll(Collection c)

  • 주어진 컬렉션에 저장된 객체들과 동일한 객체들을 HashSet에서 삭제
  • 차집합 연산과 동일
  • java.util.AbstractSet에서 구현된 메서드를 그대로 사용

boolean retainAll(Collection c)

  • 주어진 컬렉션에 저장된 객체들과 동일한 객체 외 나머지를 HashSet에서 삭제
  • 교집합 연산과 동일
  • java.util.AbstractCollection에서 구현된 메서드를 그대로 사용


Reference

0개의 댓글