|  HashSet<int[]>와 Hashset<ArrayList<Integer>>

문제를 풀다보면, 좌표를 집합에 넣어야 하는 경우가 있었다.

예를 들어, (0, 1), (2, 1) 

그래서 아무 생각 없이 아래와 HashSet<int[]>를 쓰게 되면 contains를 할 때 검색이 제대로 되지 않는 걸 볼 수 있다.

 

왜 그럴까?

 

이유는 배열의 경우 Hashcode를 비교하고, 

리스트의 경우 Wrapper된 Integer값을 비교하기 때문.

HashSet<int[]> int 배열의 hashcode를 비교
HashSet<ArrayList<Integer>> Integer List의 Wrapper객체(Integer)를 비교

 

따라서, 좌표와 같은 수열의 집합을 만든다고 하면 HashSet 안에 ArrayList로 넣는 것이 좋다.

 

[ 참고 ]

https://stackoverflow.com/questions/65454683/check-if-an-array-exists-in-a-hashsetint

'Computer Science > Algorithm' 카테고리의 다른 글

[알고리즘] 그리디  (0) 2022.08.25
[알고리즘] 탐색 - DFS, BFS, 이진 탐색  (0) 2022.08.25
[알고리즘] 정렬  (0) 2022.08.11
[알고리즘] 알고리즘 개요  (0) 2022.08.09
[백준 11660] 구간 합 구하기 5  (0) 2022.07.14

+ Recent posts