- 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에서 구현된 메서드를 그대로 사용