- 중복 허용 안함, 순서 없음
- 중복을 허용하지 않기 위해 객체 저장 전에 기존에 같은 객체가 있는지 확인
- Set 인터페이스를 구현한 대표적인 컬렉션 클래스
- 순서를 유지하려면 LinkedHashSet을 사용해야 함
- Set을 정렬하려면 List로 바꾼 뒤에 가능
생성자
HashSet();
HashSet(Collection c);
HashSet(int initialCapacity);
HashSet(int initialCapacity, float loadFactor);
메소드
add(), addAll()
객체 추가 및 합집합
remove(), removeAll()
객체 삭제 및 교집합
retainAll()
조건부 삭제(차집합)
contains(), containsAll()
포함되는 것만 남김
clear()
전체 삭제
isEmpty()
비어있는지 여부
size()
저장된 객체수
toArray()
객체 배열로 반환
주의
- HashSet의 add 메소드는 값을 저장하기 전에 자동으로 Object 클래스의 equals와 hashCode 메소드를 사용하여 중복된 데이터를 방지하는 작업을 하는데 저장하려는 객체가 여러 값을 가지고 있다면 중복을 제대로 검사하지 못하기 때문에 equals와 hashCode 메소드를 오버라이딩 해서 사용해야 함
- 하지만 이런 귀찮은 점을 편리하게 만들기 위해 자바에서 기본적으로 제공하는 Objects 클래스의 hash와 equals 메소드를 Object 클래스의 equals와 hashCode 메소드의 리턴 값으로 오버라이딩 해주기만 하면 문제 없음
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
// Object가 비교하려는 객체의 인스턴스인지 확인 후
if(!(obj instanceof Person)) return false;
Person p = (Person)obj; // 맞다면 비교하려는 객체로 형변환
return this.name.equals(p.name) && this.age == p.age; // 비교
}
'Java > Notion' 카테고리의 다른 글
Map - HashMap / Hashtable (0) | 2023.05.01 |
---|---|
Set - TreeSet (0) | 2023.04.30 |
Comparator / Comparable (0) | 2023.04.30 |
Arrays (0) | 2023.04.30 |
Iterator / ListIterator / Enumeration (0) | 2023.04.30 |