Мене здивувало те, що 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, які зараз є зайвими)!