Podemos encontrar o hashcode
de a list
que se contém como element
?
Sei que é uma prática ruim, mas foi o que o entrevistador perguntou.
Quando executei o seguinte código, ele lança um StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Agora, aqui tenho duas perguntas:
- Por que existe um
StackOverflowError
? - É possível encontrar o código hash dessa maneira?
List
interface, o hashCode
de uma lista depende de seus membros. Dado que a lista é seu próprio membro, seu código de hash depende do seu hashCode
, que depende do seu hashCode
... e assim por diante, causando recursão infinita e o que StackOverflowError
você está enfrentando. Agora, a pergunta é: por que você exige que uma lista se contenha? Posso garantir que você pode conseguir o que quer que esteja tentando fazer, de uma maneira melhor, sem a necessidade de associação recursiva como esta.