Podemos encontrar o hashcodede a listque 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?
Listinterface, o hashCodede 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 StackOverflowErrorvocê 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.