¿Por qué la interfaz java.util.Map
no amplía la interfaz java.util.Collection
? ¿No es java.util.Map
una colección de pares clave-valor?¿Por qué Map no extiende la interfaz de Colección
Respuesta
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)
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()
.
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
?
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.
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. –
¿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?
- 1. Java.util.HashMap: ¿por qué HashMap extiende AbstractMap e implementa Map?
- 2. Enum <? se extiende la interfaz>
- 3. interfaz Java extiende comparable
- 4. ¿Por qué la opción no extiende el rasgo Iterable directamente?
- 5. ¿Por qué UtteranceProgressListener no es una interfaz?
- 6. ¿Por qué necesito la interfaz?
- 7. ¿Por qué una interfaz no puede implementar otra interfaz?
- 8. No se puede convertir un HashMap <String, String> en una interfaz que extiende Map <String, String>
- 9. argumento de método se extiende clase implementa la interfaz
- 10. pasar una colección de interfaz
- 11. Java: establecer la interfaz y las diferencias de interfaz de colección
- 12. ¿Por qué insertar desde std :: map no quiere actualizar? [C++]
- 13. ¿Por qué Java.lang.Object no implementa la interfaz serializable?
- 14. ¿Por qué LinkedList (T) no implementa la interfaz IList (T)?
- 15. ¿Por qué no puedo usar la interfaz con operador explícito?
- 16. por qué no hay un método de agregar en la interfaz del iterador
- 17. Por qué java.util.Properties implementa Map <Object, Object> y no Map <String, String>
- 18. AutoMapper: ¿por qué usar Map over DynamicMap?
- 19. Herencia de interfaz Delphi: ¿Por qué no puedo acceder a los miembros de la interfaz ancestro?
- 20. ¿Por qué ItemCollection.Groups es colección de Objetos y no CollectionViewGroups?
- 21. ¿Por qué usamos la interfaz sin miembros?
- 22. ¿Por qué devolver una interfaz de colección en lugar de un tipo concreto?
- 23. ¿Por qué la colección Controls no proporciona todos los métodos de IEnumerable?
- 24. Por qué los métodos de interfaz no tienen cuerpo
- 25. Por qué las clases se compilan en .class pero la interfaz no lo hace. Interfaz
- 26. clase genérica que se extiende clase y aperos de interfaz
- 27. Cómo burlarse de una interfaz que se extiende IEnumerable
- 28. En algunos códigos Java, ¿por qué la clase Deck extiende la clase de la Tarjeta?
- 29. ¿Por qué implementación de interfaz explícita?
- 30. ¿Por qué las personas definen objeto extiende su clase compañera?
no lo es. Map.entrySet() es, si está implementado. – bestsss