Мене здивувало те, що Map<?,?>
не є Collection<?>
.
Я думав, що це буде мати багато сенсу, якщо це буде оголошено таким:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
Зрештою, Map<K,V>
це колекція Map.Entry<K,V>
, чи не так?
То чи є вагома причина, чому вона не реалізується як така?
Дякую Клетусу за найавторитетнішу відповідь, але мені все ще цікаво, чому, якщо ви вже можете переглянути Map<K,V>
як Set<Map.Entries<K,V>>
(через entrySet()
), він не просто розширює цей інтерфейс.
Якщо a
Map
є aCollection
, які елементи? Єдина обґрунтована відповідь - "Пари ключових значень"
Точно, interface Map<K,V> extends Set<Map.Entry<K,V>>
було б чудово!
але це забезпечує дуже обмежену (і не особливо корисну)
Map
абстракцію.
Але якщо це так, то чому це entrySet
визначається інтерфейсом? Це повинно бути корисним якось (і я думаю, що легко сперечатися на цю позицію!).
Ви не можете запитати, на яке значення відображається певний ключ, а також не можна видалити запис для даного ключа, не знаючи, на яке значення воно відображається.
Я не кажу, що це все для цього Map
! Він може і повинен зберігати всі інші методи (за винятком тих entrySet
, які зараз є зайвими)!