Можем ли мы найти hashcodea, listкоторый содержит себя как element?
Я знаю, что это плохая практика, но это то, что спросил интервьюер.
Когда я запустил следующий код, он выдает StackOverflowError:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Теперь у меня есть два вопроса:
- Почему есть
StackOverflowError? - Можно ли найти хеш-код таким образом?
Listинтерфейса hashCodeсписок зависит от его членов. Учитывая, что список является его собственным членом, его хеш-код зависит от его hashCode, который зависит от его hashCode... и так далее, вызывая бесконечную рекурсию и то, с StackOverflowErrorчем вы сталкиваетесь. Теперь вопрос: почему вы требуете, чтобы список содержал себя? Я могу гарантировать вам, что вы можете достичь того, что вы пытаетесь сделать, лучшим способом, не требуя рекурсивного членства, подобного этому.