HashSet

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
profile
백엔드를 공부하고 있습니다.

0개의 댓글