Computer Science/Algorithm

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

simDev1234 2022. 8. 17. 11:32

|  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