HashSet, LinkedHashSet 성능비교

kldaji·2021년 12월 10일
1

Performance

목록 보기
1/1

Q. LinkedHashSet은 저장 순서를 보장하는데, 얼마나 큰 성능 차이가 있으며, 내부 구현은 어떻게 되어있을까?

객체 생성

nHashSet (ns)LinkedHashSet (ns)
1033533497
100617218972
10003294437453
1000096258106902
100000458945370427
1000000322311122526962
100000002025427120579414
  • 대부분의 경우에서 비슷한 성능을 보였다.

add

nHashSet (ns)LinkedHashSet (ns)
1043022864
1001158013354
10005841859937
10000229795248593
10000032998303540409
10000003107194551004127
10000000302512767511996641
  • n이 10만 까지는 비슷한 성능을 보였지만, 100만 이상인 순간부터 큰 성능차이를 보였다.

remove

nHashSet (ns)LinkedHashSet (ns)
1061302170
100125636195
10006136268315
10000303161264687
1000007841251010511
100000056041666298848
100000006091485091865556
  • n이 1만 까지는 HashSet이 더 느린 경향을 보였지만, 그 이후에는 큰 성능차이를 보였다.

contains (in)

nHashSet (ns)LinkedHashSet (ns)
1045791324
10081694304
10005152226121
1000020436299145
100000869085664588
100000065132784773900
100000003828344228933217
  • 대체적으로 약 2배가량 LinkedHashSet의 성능이 더 좋다.

Answer

  • HashSet의 add, remove, contains은 HashMap 구조를 따라간다.
  • LinkedHashSet의 내부구조는 살펴볼 수 없었다.
  • add, remove 성능은 HashSet이 전반적으로 좋았지만, contains 성능은 LinkedHashSet이 좋았다.

결론

  • HashSet의 내부구현은 HashMap을 참고하자
  • 원소 추가, 삭제가 많다면 HashSet을 사용하고, 원소 유무 판단이 많다면 LinkedHashSet을 사용하자

느낀점

  • LinkedHashSet의 내부구현은 볼 수 없었지만, 성능 비교를 통해 어느 상황에 어느 자료구조를 써야 좋을지 알 수 있었던 계기가 되었다.
profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.

0개의 댓글