Czy możemy znaleźć hashcodecoś, listco 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?
Listinterfejsu hashCodelista 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.