ฉันรู้สึกประหลาดใจโดยความจริงที่ว่าไม่ได้เป็นMap<?,?>
Collection<?>
ฉันคิดว่ามันคงสมเหตุสมผลถ้ามีการประกาศเช่นนี้:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
ท้ายที่สุดแล้ว a Map<K,V>
คือชุดของMap.Entry<K,V>
ใช่ไหม
ดังนั้นมีเหตุผลที่ดีว่าทำไมจึงไม่ใช้งานเช่นนี้
ขอบคุณ Cletus สำหรับคำตอบที่เชื่อถือได้มากที่สุด แต่ฉันยังคงสงสัยว่าทำไมหากคุณสามารถดูMap<K,V>
เป็นSet<Map.Entries<K,V>>
(ผ่านentrySet()
) มันไม่เพียงขยายส่วนต่อประสานนั้นแทน
ถ้า a
Map
คือCollection
อะไรองค์ประกอบคืออะไร คำตอบที่สมเหตุสมผลคือ "คู่ของคีย์ - ค่า"
ว่าinterface Map<K,V> extends Set<Map.Entry<K,V>>
จะดี!
แต่สิ่งนี้ให้สิ่งที่เป็น
Map
นามธรรมที่จำกัด (และไม่มีประโยชน์อย่างยิ่ง)
แต่ถ้าเป็นอย่างนั้นทำไมentrySet
อินเทอร์เฟซถูกระบุไว้ทำไม? มันจะต้องมีประโยชน์อย่างใด (และฉันคิดว่ามันง่ายที่จะเถียงกับตำแหน่งนั้น!)
คุณไม่สามารถถามค่าคีย์แผนที่ที่กำหนดและไม่สามารถลบรายการสำหรับคีย์ที่กำหนดโดยไม่ทราบว่าคีย์แมปนั้นให้คุณค่าอะไร
ฉันไม่ได้บอกว่านั่นคือทั้งหมดที่มีให้Map
! สามารถและควรรักษาวิธีอื่น ๆ ทั้งหมด (ยกเว้นentrySet
ซึ่งซ้ำซ้อนในขณะนี้)!