Possiamo trovare il hashcode
di a list
che si contiene come element
?
So che questa è una cattiva pratica, ma è quello che ha chiesto l'intervistatore.
Quando ho eseguito il seguente codice genera un StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Ora qui ho due domande:
- Perché c'è un
StackOverflowError
? - È possibile trovare il codice hash in questo modo?
List
dell'interfaccia, il hashCode
di un elenco dipende dai suoi membri. Dato che la lista è il suo membro, il suo codice hash dipende dal suo hashCode
, che dipende dal suo hashCode
... e così via, causando una ricorsione infinita e il punto in StackOverflowError
cui ti imbatti. Ora la domanda è: perché hai bisogno di un elenco per contenere se stesso? Ti posso garantire che puoi ottenere qualsiasi cosa tu stia cercando di fare, in un modo migliore, senza richiedere un abbonamento ricorsivo come questo.