una tapizados sofas sofa simulador sillones sillon separados por pieza modulos modulares modernos fama diseñar java collections interface set

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

Set - es una colección de objetos distintos


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 y e2 tales como e1.equals(e2) , y como máximo un elemento null . 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).