Можем ли мы найти hashcode
a, 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
чем вы сталкиваетесь. Теперь вопрос: почему вы требуете, чтобы список содержал себя? Я могу гарантировать вам, что вы можете достичь того, что вы пытаетесь сделать, лучшим способом, не требуя рекурсивного членства, подобного этому.