Können wir das hashcode
von einem finden list
, das sich selbst enthält als element
?
Ich weiß, dass dies eine schlechte Praxis ist, aber das hat der Interviewer gefragt.
Wenn ich den folgenden Code ausgeführt habe, wird ein StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Hier habe ich zwei Fragen:
- Warum gibt es eine
StackOverflowError
? - Ist es möglich, den Hash-Code auf diese Weise zu finden?
List
Schnittstelle hashCode
hängt das einer Liste von ihren Mitgliedern ab. Angesichts der Tatsache, dass die Liste ein eigenes Mitglied ist, hängt der Hash-Code von ihrem ab hashCode
, was von ihrem hashCode
... abhängt, und so weiter, was zu einer unendlichen Rekursion und dem, auf das StackOverflowError
Sie stoßen, führt. Die Frage ist nun: Warum benötigen Sie eine Liste, um sich selbst zu enthalten? Ich kann Ihnen garantieren, dass Sie alles, was Sie versuchen, besser erreichen können, ohne eine solche rekursive Mitgliedschaft zu erfordern.