java - tapizados - Colección<E> y Set<E> son lo mismo?
sofas modulares modernos (6)
Además, la documentación de Set
define un contrato para .equals
, que dice "solo otros Sets pueden ser iguales a este Conjunto" . Si no pudiéramos reconocer los otros conjuntos por su tipo (con instanceof
), sería imposible implementar esto.
Si fuera solo para equals()
, sería posible tener un método allowsDuplicates()
para Collection
. Pero a menudo hay casos en que las API quieren decir "por favor no me den duplicados" o "garantizo que esto no contiene duplicados", y en Java no hay forma de decir en una declaración de método "por favor, den solo colecciones allowsDuplicates()
método allowsDuplicates()
devuelve false ". Por lo tanto, el tipo adicional.
Tengo una pregunta sobre esas dos interfaces en Java. Set extends Collection, pero no agrega nada. Son exactamente lo mismo. Me estoy perdiendo de algo ?
Collection es una interfaz más genérica que se compone de listas, colas, conjuntos y muchos más.
Eche un vistazo a la sección '' Todas las subinterfaces conocidas '' aquí .
Set no permite duplicados.
Es una diferencia semántica, no sintáctica.
Todo está en la documentación:
Conjunto: una colección que no contiene elementos duplicados. Más formalmente, los conjuntos no contienen un par de elementos e1 y e2 tales como e1.equals (e2), y como máximo un elemento nulo. Tal como lo implica su nombre, esta interfaz modela la abstracción del conjunto matemático.
y
Colección: la interfaz raíz en la jerarquía de la colección. Una colección representa un grupo de objetos, conocidos como sus elementos. Algunas colecciones permiten elementos duplicados y otras no. Algunos están ordenados y otros no ordenados. El SDK no proporciona ninguna implementación directa de esta interfaz: proporciona implementaciones de subinterfaces más específicas, como Set y List. Esta interfaz generalmente se usa para pasar colecciones y manipularlas donde se desea la máxima generalidad.
Es solo para distinguir la implementación y el uso futuro.
Esto vino de la teoría y el diccionario Set
Colección: algo que se recopila; un grupo de objetos o una cantidad de material acumulado en un lugar, especialmente para algún propósito o como resultado de algún proceso
Buena pregunta. Supongo que el propósito principal de tener explícitamente una interfaz para el concepto de un Set
en comparación con el concepto de una Collection
es realmente distinguir formalmente los conceptos. Digamos que estás escribiendo un método
void x(Collection<?> c);
No tendrá la misma idea de los argumentos que desea obtener, como si estuviera escribiendo
void x(Set<?> s);
El segundo método espera Collections
que contengan cada elemento como máximo una vez (es decir, Sets
). Esa es una gran diferencia semántica con respecto al primer método, que no le importa si recibe Sets
, Lists
o cualquier otro tipo de Collection
Si miras con atención, el Javadoc del método Set
es diferente, mostrando explícitamente las diferentes nociones que entran en juego cuando se habla de Collection
o Set
De la documentación de la Collection
:
Una colección representa un grupo de objetos, conocidos como sus elementos. Algunas colecciones permiten elementos duplicados y otras no. Algunos están ordenados y otros no ordenados.
De la documentación de Set
:
Una colección que no contiene elementos duplicados. Más formalmente, los conjuntos no contienen ningún par de elementos
e1
ye2
tales comoe1.equals(e2)
, y como máximo un elementonull
. Tal como lo implica su nombre, esta interfaz modela la abstracción del conjunto matemático.
Eso debería aclarar la diferencia entre un Set
y una Collection
(la interfaz más general).