Back-End/백엔드 관련 정리

[백엔드 과정][자바 기초] - hashCode와 equals 그리고 TreeSet과 HashSet

얄루몬 2022. 8. 31. 20:10


https://kizoo.gitlab.io/docs/archive/java/002/

 

2

HashSet으로 1들의 집합을 만듭니다. import java.util.*; class Sameness { public static void 집합크기(Set 집합, Object[] elements) { Collections.addAll( 집합, elements ) ; System.out.println( 집합.toString() + "의 원소 수는 " + 집

kizoo.gitlab.io

 


1. HashSet으로 1들의 집합을 만듭니다.

  • HashSet을 사용한 중복 제거에도 불구하고 set 안에는 왜 5개나 되는 1이 존재하는 것일까?
  • 자바는 모든 객체에 해시코드가 있다. 또한 타입마다 해시코드가 다르기 때문에 이 각기 다른 타입이 가진 해시코드 때문에 값은 같아도 다른 것으로 인지해 1이 다양하게 남아있는 것이다.

2. 분수(유리수)를 정의

  • 분수를 약분까지 끝내 해시셋에 넣었지만 값이 모두 같은데 다 중복제거 되지 않은 채로 들어가 있는 이유는 이 역시도 각기 다른 객체로 서로 다른 해시코드를 갖기 때문이다. 이 경우엔 hashcode를 오버라이드해줘서 같게 만들어주고 equals 역시도 오버라이드해서 값을 같은지 비교할 수 있게하여 준다.

3. TreeSet과 HashSet

  • HashSet
    • equals와 hashCode를 사용해 값 비교를 합니다.  
    • 성능이 다른 Set에 비해서 좋습니다.
  • TreeSet
    • compareTo로 값 비교를 합니다.
    • 이 경우엔 순서가 있는 경우 사용하고 해시셋에 비해 성능은 좋지 않습니다.
    • TreeSet은 comparable interface를 사용해주어야 합니다.