HashSet : 순서X, 중복X
- set 인터페이스를 구현한 대표적인 컬렉션 클래스 ( 가장 일반적 )
- 순서를 유지하려면,
LinkedHashSet
클래스를 사용하면 된다.- 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인
↳ 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
↳boolean add(Object o)
는 저장할 객체의equals()
와hashCode()
를 호출
(Set에 객체를 저장하는 add 메소드는 저장 전에 equals, hashCode메소드(Object 클래스 메소드)를 이용해서 중복인지 체크함)
→equals()
와hashCode()
가 오버라이딩 돼있어야 중복확인할 수 있음.TreeSet
: 범위 검색과 정렬에 유리한 컬렉션 클래스
: HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
예제
1) 중복
↳ HashSet은 중복을 허용하지 않기 때문에, 같은 값은 1개만 저장함.
2) 정렬
↳ set은 순서가 없기 때문에 정렬(sort)을 할 수 없음.
↳ ∴ Set의 값들을 List에 저장해서 정렬하고, 그 값을 출력함.
3) equals, hashCode
↳ abc, David:10 둘 다 중복저장이 되면 안되는데, 중복 저장하는 현상이 나타났음
↳equals()
와hashCode()
가 없어서 정상동작 되지 않은 것임.
⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎ ⬇︎
↳ 원래return (name+age).hashCode();
코드를 썼는데,
요즘에는return Objects.hash(name, age)
코드를 씀.
↳equals()
와hashCode()
오버라이딩 해줌. hashSet 정상 작동.
4) 합, 교, 차집합
출처
- 자바의 정석 기초편 ch 11- 34~36, 37~38