- 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.Cloneable
와 java.io.Serializable
는 마커 인터페이스
: 해당 인터페이스를 사용하는 클래스에 관한 추가 정보를 제공하는 용도로 쓰이는 빈 인터페이스
java.util.HashSet의 상위 인터페이스
java.util.AbstractCollection
- 컬렉션 클래스의 기본 골격을 제공하기 위한 추상 클래스
Collection
인터페이스에 정의된 일부 메서드를 구현
java.util.AbstractSet
추상 클래스
- 컬렉션 클래스의 자손인 집합 클래스의 기본 골격을 제공하기 위한 추상 클래스
Set
인터페이스에 정의된, 집합 클래스의 주요 기능을 구현
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
에서 구현된 메서드를 그대로 사용