*JAVA*

[java] 컬렉션 프레임웍 - HashSet

깐부로부터 2021. 11. 21. 20:22

- 수학의 집합에 비유될 수 있다.

- 저장순서가 유지되지 않는다.

- index 개념 없음(순서 보장 X)

- 객체를 중복해서 저장할 수 없다.

- 하나의 null만 저장할 수 있다.

 

 

HashSet 특징 : 값이 추가될 때마다 equals()메소드와
hashCode()로 비교 후 둘 다 결과가 true일 경우
동일 객체로 판단 

equals() : 현재 객체의 주소값을 비교해서 결과 반환 (같으면 true)
hashCode() : 현재 객체의 주소값을 해싱해서 10진수로 반환

총정리!
HashSet에 객체를 담을 때 내부적으로 equals메소드랑
hashCode 메소드를 기준으로 값이 일치하는지를 비교하고 담는다.
=> equals결과가 true이면서(그리고) hashCode의 값도 일치한다면
동일객체로 판단!!!(중복저장 XXXXXX)

 

 

cf) Object의 equals()와 hasCode()
Object 클래스
equals() : 두 객체의 주소값을 비교해서 일치하면 true
hashCode() : 객체의 주소값을 해싱해서 10진수 형태로 반환
=> 반환한 결과들끼리 비교! => 두 결과가 모두 일치해야 동일 객체!

=> 내용물이 같은데 주소값이 달라서 동일객체가 아닌걸로 판단이 되면서
중복저장이 되어버린다 => 방지하고 싶다면?
equals메소드랑 hashCode메소드를 오버라이딩해서 사용해야한다.

 

 

 

* 메소드 *

 

객체 추가

- boolean add(E e) : 주어진 객체를 저장, 객체가 성공적으로 저장되면 true / 중복 객체면 false를 리턴

 

객체 검색

- boolean contains(Object o) : 주어진 객체가 저장되어 있는지 여부

- isEmpty() : 컬렉션이 비어 있는지 조사

- Iterator<E> iterator() :  저장된 객체를 한번씩 가져오는 반복자 리턴 ★중요!

- int size() : 저장되어있는 전체 객체수 리턴

 

객체삭제

- void clear() : 저장된 모든 객체를 삭제

- boolean remove(Object o) : 주어진 객체를 삭제


Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없다.

대신, 전체 객체를 대상으로 한번씩 반복해서 가져오는 반복자(Iterator)를 제공

 

[ 표현법 ]

 

Set<String> set = .......;

Iterator<String> iterator = set.iterator(); // Iterator 생성

 

 

 

<Iterator(인터페이스)의 메소드>

 

- boolean hasNext() : 가져올 객체가 있으면 true를 반환하고 없으면 false를 반환

- E next() : 컬렉션에서 하나의 객체를 가져온다.

- void remove() : Set 컬렉션에서 객체를 제거한다.