Bisakah kita menemukan hashcode
a list
yang mengandung dirinya element
?
Saya tahu ini adalah praktik yang buruk, tetapi inilah yang diminta pewawancara.
Ketika saya menjalankan kode berikut ini melempar StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Sekarang di sini saya punya dua pertanyaan:
- Kenapa ada
StackOverflowError
? - Apakah mungkin untuk menemukan kode hash dengan cara ini?
List
antarmuka, hashCode
daftar tergantung pada anggotanya. Mengingat bahwa daftar adalah anggotanya sendiri, kode hash tergantung pada hashCode
, yang tergantung pada hashCode
... dan seterusnya, menyebabkan rekursi tak terbatas dan StackOverflowError
Anda berlari ke. Sekarang pertanyaannya adalah: mengapa Anda memerlukan daftar untuk memuat dirinya sendiri? Saya dapat menjamin Anda bahwa Anda dapat mencapai apa pun yang Anda coba lakukan, dengan cara yang lebih baik, tanpa memerlukan keanggotaan rekursif seperti ini.