HashSet

0

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개의 댓글