Pouvons-nous trouver le hashcode
d'un list
qui se contient comme element
?
Je sais que c'est une mauvaise pratique, mais c'est ce que l'intervieweur a demandé.
Lorsque j'ai exécuté le code suivant, il lance un StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Maintenant, ici, j'ai deux questions:
- Pourquoi y en a-t-il
StackOverflowError
? - Est-il possible de trouver le code de hachage de cette manière?
List
interface, le fonctionnement hashCode
d'une liste dépend de ses membres. Étant donné que la liste est son propre membre, son code de hachage dépend de son hashCode
, qui dépend de son hashCode
... et ainsi de suite, provoquant une récursion infinie et le que StackOverflowError
vous rencontrez. Maintenant, la question est: pourquoi avez-vous besoin d'une liste pour se contenir? Je peux vous garantir que vous pouvez réaliser tout ce que vous essayez de faire, d'une meilleure manière, sans exiger une adhésion récursive comme celle-ci.