2011-04-18 31 views

Respuesta

22

La colección supone elementos de un valor. Map asume entradas de pares clave/valor. Podrían haber sido diseñados para reutilizar la misma interfaz común; sin embargo, algunos métodos que implementan son incompatibles, p.

Collection.remove(Object) - removes an element. 
Map.remove(Object) - removes by key, not by entry. 

Se podría modelar un mapa como una colección de entradas, que es lo que hace Map.entrySet().

Existen algunos métodos en común; size(), isEmpty(), clear(), putAll/addAll() pero es poco probable que tengan mucho valor como interfaz independiente. (De nuevo, Map.entrySet() se puede usar en su lugar)

18

Porque la interfaz Collection es en gran medida incompatible con la interfaz Map. Si Map extendió Collection, ¿qué haría el método add(Object)?

Las dos interfaces tienen una semántica muy diferente. Si necesita los valores o las claves de Map como colecciones, siempre puede usar keySet()/values().

2

Porque algunos métodos declarados en Collections no se ajustan a una interfaz Map y viceversa.

Un ejemplo para el primero es el método add(Object) de la interfaz Collections,
un ejemplo de la segunda es la put(K, V) de la interfaz de Map.

Simplemente no existe una forma coherente de implementar sensiblemente add(Object) para un mapa: ¿es una clave, es un valor? Lo mismo es válido para put(K, V). ¿Qué podría ser una clave en un ArrayList?

1

Todas las colecciones deben implementar un constructor predeterminado y otro constructor que tome una colección como parámetro. No puede construir un mapa con ninguna otra colección que no sea un mapa.

Dado que Map impone restricciones en el tipo de objetos que puede contener, no puede implementar un mapa como una colección.

+1

Los dos constructores ** no ** son un requisito estricto: se aplican solo a colecciones * de uso general (es decirno a los especializados) y está escrito como '* debe * proporcionar dos constructores' estándar ', por lo que incluso para colecciones de propósito general no es una necesidad absoluta. –

3

¿Por qué la interfaz java.util.Map no amplía la interfaz java.util.Collection?

Map es un par clave/valor mientras que Collection es una colección de un grupo de objetos almacenados en una manera estructurada y tiene un mecanismo de acceso especificado. El motivo por el cual Map no extiende la interfaz de Colecciones es que add(E e); no atiende el par de valores clave como Map put(K, V).

Además, ¿cuál sería el método iterator() de la Colección si Map tuviera que extenderlo? ¿El iterador de la clave o el iterador del valor?

Cuestiones relacionadas