- 수학의 집합에 비유될 수 있다.
- 저장순서가 유지되지 않는다.
- 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 컬렉션에서 객체를 제거한다.
'*JAVA*' 카테고리의 다른 글
[java] 컬렉션 프레임웍 - ProperTies (0) | 2021.11.22 |
---|---|
[java] 컬렉션 프레임웍 - HashMap (0) | 2021.11.22 |
[java] 컬렉션 프레임웍 - Iterator (0) | 2021.11.21 |
[java] 컬렉션 프레임웍 - LinkedList (0) | 2021.11.21 |
[java] 컬렉션 프레임웍 - ArrayList (0) | 2021.11.21 |