Saya terkejut dengan fakta bahwa Map<?,?>
itu bukan Collection<?>
.
Saya pikir itu akan sangat masuk akal jika dinyatakan seperti itu:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
Lagi pula, a Map<K,V>
adalah koleksi Map.Entry<K,V>
, bukan?
Jadi apakah ada alasan bagus mengapa itu tidak diterapkan seperti itu?
Berkat Cletus untuk jawaban yang paling otoritatif, tapi aku masih bertanya-tanya mengapa, jika Anda sudah bisa melihat Map<K,V>
seperti Set<Map.Entries<K,V>>
(melalui entrySet()
), tidak hanya memperpanjang antarmuka yang sebaliknya.
Jika a
Map
adalah aCollection
, apa saja elemennya? Satu-satunya jawaban yang masuk akal adalah "Pasangan nilai kunci"
Persis, interface Map<K,V> extends Set<Map.Entry<K,V>>
pasti hebat!
tetapi ini memberikan
Map
abstraksi yang sangat terbatas (dan tidak terlalu berguna) .
Tetapi jika itu yang terjadi maka mengapa entrySet
ditentukan oleh antarmuka? Entah bagaimana itu harus berguna (dan saya pikir mudah untuk memperdebatkan posisi itu!).
Anda tidak bisa menanyakan nilai apa yang diberikan peta kunci, Anda juga tidak bisa menghapus entri untuk kunci yang diberikan tanpa mengetahui nilai apa yang dipetakannya.
Saya tidak mengatakan bahwa hanya itu yang ada untuk itu Map
! Itu bisa dan harus menyimpan semua metode lain (kecuali entrySet
, yang berlebihan sekarang)!