Können wir das hashcodevon 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?
ListSchnittstelle hashCodehä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 StackOverflowErrorSie 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.