Saya percaya itu adalah, setidaknya sebagian, untuk memungkinkan Anda menggabungkan containsKeydan getmenjadi satu panggilan. Jika peta dapat menyimpan nol, tidak ada cara untuk mengetahui apakah getmengembalikan nol karena tidak ada kunci untuk nilai itu, atau hanya karena nilainya nol.
Mengapa itu menjadi masalah? Karena tidak ada cara aman untuk melakukannya sendiri. Ambil kode berikut:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
Karena mini adalah peta konkuren, kunci k dapat dihapus di antaracontainsKey dan getpanggilan, menyebabkan potongan ini mengembalikan nol yang tidak pernah ada dalam tabel, daripada yang diinginkan KeyNotPresentException.
Biasanya Anda akan menyelesaikannya dengan menyinkronkan, tetapi dengan peta bersamaan yang tentu saja tidak akan berfungsi. Karenanya tanda tangan untuk getharus berubah, dan satu-satunya cara untuk melakukan itu dengan cara yang kompatibel-mundur adalah mencegah pengguna memasukkan nilai nol di tempat pertama, dan terus menggunakannya sebagai pengganti untuk "kunci tidak ditemukan".