J'ai été surpris par le fait que ce Map<?,?>
n'est pas un fichier Collection<?>
.
J'ai pensé que cela aurait beaucoup de sens s'il était déclaré comme tel:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
Après tout, Map<K,V>
c'est une collection de Map.Entry<K,V>
, n'est-ce pas?
Alors, y a-t-il une bonne raison pour laquelle ce n'est pas mis en œuvre en tant que tel?
Merci à Cletus pour une réponse des plus fiables, mais je me demande toujours pourquoi, si vous pouvez déjà afficher un Map<K,V>
as Set<Map.Entries<K,V>>
(via entrySet()
), cela ne fait pas qu'étendre cette interface à la place.
Si a
Map
est aCollection
, quels sont les éléments? La seule réponse raisonnable est "Paires clé-valeur"
Exactement, ce interface Map<K,V> extends Set<Map.Entry<K,V>>
serait génial!
mais cela fournit une
Map
abstraction très limitée (et pas particulièrement utile) .
Mais si tel est le cas, pourquoi est entrySet
spécifié par l'interface? Cela doit être utile en quelque sorte (et je pense qu'il est facile de plaider pour cette position!).
Vous ne pouvez pas demander à quelle valeur une clé donnée correspond, ni supprimer l'entrée pour une clé donnée sans savoir à quelle valeur elle correspond.
Je ne dis pas que c'est tout ce qu'il y a à faire Map
! Il peut et doit conserver toutes les autres méthodes (sauf entrySet
, qui est redondante maintenant)!