Set


Set중복을 허용하지 않는 순서 없는 객체들의 모음이다.

빠른 검색 속도를 가진다. 인덱스가 따로 없기 때문에 iterator를 사용한다.


HashSet

내부적으로 HashMap을 합성하고 있다.

단, HashMapkey-value 형태로 저장을 하는데 반해 HashSetHashMapkey-dummyObject 형태로 저장한다.

HashMap과 마찬가지로 해싱을 사용한다.

hasCode를 이용하기 때문에 속도가 상당히 빠르다.


HashMap vs HashSet

  • HashSet은 내부적으로 HashMap을 사용한다.
  • HashMap은 요소들을 Entry<Key, Value> 형태로 저장하고 내부적으로 연결 리스트 형태로 사용하지만, HashSet은 오직 요소 자체를 저장한다.(hashCode 활용)
  • 하나의 null을 가질 수 있다.
  • HashSet에 저장되는 요소들은 equals(), hashCode()를 반드시 구현해야한다. (중복 값 체크를 위해)
  • HashMapHashSet보다 성능이 더 좋다.
    • 왜일까? HashSet도 내부적으로 HashMap을 사용하는데?
    • 보통 HashMapkeyunique key를 사용하기 때문에 객체 자체를 사용하는 HashSet보다는 더 빠르다. (만일 HashMap의 keySet이 Object라면 거의 의미가 없을수도?)