Czy możemy znaleźć hashcode
coś, list
co zawiera się jako element
?
Wiem, że to zła praktyka, ale o to pytał ankieter.
Kiedy uruchomiłem następujący kod, generuje on StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Teraz mam dwa pytania:
- Dlaczego istnieje
StackOverflowError
? - Czy w ten sposób można znaleźć kod skrótu?
List
interfejsu hashCode
lista zależy od jej członków. Biorąc pod uwagę, że lista jest jej własnym członkiem, jej kod skrótu zależy od jej hashCode
, który zależy od jego hashCode
... i tak dalej, powodując nieskończoną rekurencję i napotkanie StackOverflowError
. Teraz pytanie brzmi: dlaczego wymaga się, aby lista się zawierała? Gwarantuję ci, że możesz osiągnąć wszystko, co chcesz zrobić, w lepszy sposób, bez konieczności posiadania takiego członkostwa rekurencyjnego.