자체를 포함 hashcode
하는의 list
를 찾을 수 있습니까 element
?
나는 이것이 나쁜 습관이라는 것을 알고 있지만 이것은 면접관이 요구 한 것입니다.
다음 코드를 실행하면 다음이 발생합니다 StackOverflowError
.
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
이제 두 가지 질문이 있습니다.
- 왜
StackOverflowError
있습니까? - 이런 식으로 해시 코드를 찾을 수 있습니까?
List
인터페이스의 정의에 hashCode
따라 목록의 구성원에 따라 목록이 달라집니다. 목록이 자체 멤버 인 경우 해시 코드는에 의존하며 hashCode
, 그에 따라 hashCode
... 등에 의존 하여 무한 재귀를 발생시키고 StackOverflowError
사용자는 실행됩니다. 이제 문제는 : 왜 자신을 포함하기 위해 목록이 필요한가요? 나는 이와 같은 재귀 멤버쉽을 요구하지 않고 더 나은 방법으로 당신이하려는 일을 성취 할 수 있음을 보장 할 수 있습니다.