¿Cuál es la diferencia entre Set y List?

¿Cuál es la diferencia fundamental entre las interfaces Set y List ?

List es una secuencia ordenada de elementos, mientras que Set es una lista distinta de elementos que no está ordenada (gracias, Quinn Taylor ).

List:

Una colección ordenada (también conocida como secuencia). El usuario de esta interfaz tiene un control preciso sobre en qué parte de la lista se inserta cada elemento. El usuario puede acceder a los elementos por su índice entero (posición en la lista) y buscar elementos en la lista.

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 nulo. Tal como lo implica su nombre, esta interfaz modela la abstracción del conjunto matemático.

 ╔═══════════════════╦══════════════════════╦═════════════════════════════╗ ║ ║ List ║ Set ║ ╠═══════════════════╬══════════════════════╬═════════════════════════════╣ ║ Duplicates ║ YES ║ NO ║ ╠═══════════════════╬══════════════════════╬═════════════════════════════╣ ║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║ ╠═══════════════════╬══════════════════════╬═════════════════════════════╣ ║ Positional Access ║ YES ║ NO ║ ╚═══════════════════╩══════════════════════╩═════════════════════════════╝ 

Listas ordenadas de elementos (únicos o no)
Conforme a la interfaz de Java llamada List
Se puede acceder por índice

implementado usando

  • Lista enlazada
  • Lista de arreglo

Listas de elementos únicos:
Conforme a la interfaz de Java llamada Set
No se puede acceder por índice

implementado usando

  • HashSet (desordenado)
  • LinkedHashSet (ordenado)
  • TreeSet (ordenado por orden natural o por el comparador proporcionado)

Ambas interfaces Set y List ajustan a la interfaz de Java llamada Collection

Un conjunto no puede contener elementos duplicados mientras que una lista puede. Una lista (en Java) también implica orden.

  • Una lista es una agrupación ordenada de elementos
  • Un conjunto es una agrupación desordenada de elementos sin duplicados permitidos (generalmente)

Conceptualmente usualmente nos referimos a una agrupación desordenada que permite duplicados como una bolsa y no permite duplicados. Es un conjunto.

Lista

  1. Es una agrupación ordenada de elementos.
  2. La lista se usa para la colección de elementos con duplicados.
  3. Los nuevos métodos se definen dentro de la interfaz de la lista.

Conjunto

  1. Es una agrupación desordenada de elementos.
  2. El conjunto se usa para la colección de elementos sin duplicados.
  3. No se definen nuevos métodos dentro de la interfaz Set, por lo que debemos usar los métodos de la interfaz de Colección solo con las subclases Set.

Lista:

List generalmente permiten objetos duplicados. List s debe ordenarse y, por lo tanto, puede accederse por índice.

Las clases de implementación incluyen: ArrayList , LinkedList , Vector

Conjunto:

Set no permiten objetos duplicados. La mayoría de las implementaciones no están ordenadas, pero es específica de la implementación.

Las clases de implementación incluyen: HashSet (desordenado), LinkedHashSet (ordenado), TreeSet (ordenado por orden natural o por el comparador proporcionado)

Como estamos hablando de las interfaces de Java, ¿por qué no mirar el Javadoc?

  • Una List es una colección ordenada (secuencia), que generalmente permite duplicados
  • A Set una colección que no contiene elementos duplicados, el orden de iteración puede estar garantizado por la implementación

No se menciona ninguna falta de orden con respecto a los Conjuntos: depende de la implementación.

Puede que esta no sea la respuesta que estás buscando, pero JavaDoc de las clases de colecciones es bastante descriptiva. Copiar / pegar:

Una colección ordenada (también conocida como secuencia). El usuario de esta interfaz tiene un control preciso sobre en qué parte de la lista se inserta cada elemento. El usuario puede acceder a los elementos por su índice entero (posición en la lista) y buscar elementos en la lista.

A diferencia de los conjuntos, las listas generalmente permiten elementos duplicados. Más formalmente, las listas generalmente permiten pares de elementos e1 y e2 tales que e1.equals (e2), y normalmente permiten múltiples elementos nulos si permiten elementos nulos en absoluto. No es inconcebible que alguien desee implementar una lista que prohíba los duplicados, lanzando excepciones de tiempo de ejecución cuando el usuario intenta insertarlos, pero esperamos que este uso sea raro.

Un conjunto es un grupo desordenado de objetos distintos: no se permiten objetos duplicados. Generalmente se implementa utilizando el código hash de los objetos que se insertan. (Implementaciones específicas pueden agregar ordenamiento, pero la interfaz Set no lo hace).

Una lista es un grupo ordenado de objetos que pueden contener duplicados. Se podría implementar con una ArrayList , LinkedList , etc.

1. La lista permite valores duplicados y el conjunto no permite duplicados

2. La lista mantiene el orden en el que insertó los elementos en la lista. El conjunto no mantiene el orden. 3.List es una secuencia ordenada de elementos mientras que Set es una lista distinta de elementos que está desordenada.

Ordenar … una lista tiene un pedido, un conjunto no.

Todas las clases de List mantienen el orden de inserción. Usan diferentes implementaciones basadas en el rendimiento y otras características (por ejemplo, ArrayList para la velocidad de acceso de un índice específico, LinkedList para simplemente mantener el orden). Como no hay una clave, se permiten duplicados.

Las clases Set no mantienen el orden de inserción. Opcionalmente, pueden imponer un orden específico (como con SortedSet ), pero típicamente tienen un orden definido por implementación basado en alguna función hash (como con HashSet ). Como a los Set se accede por clave, no se permiten duplicados.

Lista Vs Set

1) Establecer no permite duplicados. La lista permite duplicar. Basado en la implementación de Set, también mantiene el orden de inserción.

por ejemplo: LinkedHashSet . Mantiene el orden de inserción.Por favor, haga clic aquí

2) contiene el método. Por naturaleza del conjunto, dará un mejor rendimiento para acceder. El mejor caso es o (1). Pero la lista tiene un problema de rendimiento para invocar contains .

Lista:
La lista permite elementos duplicados y valores nulos. Fácil de buscar utilizando el índice correspondiente de los elementos y también mostrará los elementos en orden de inserción. Ejemplo: (lista de enlaces)

 import java.util.*; public class ListExample { public static void main(String[] args) { // TODO Auto-generated method stub List l=new LinkedList(); l.add(001); l.add(555); l.add(333); l.add(888); l.add(555); l.add(null); l.add(null); Iterator il=l.iterator(); System.out.println(l.get(0)); while(il.hasNext()){ System.out.println(il.next()); } for(Integer str : l){ System.out.println("Value:"+str); } } } 

Salida:

1
1
555
333
888
555
nulo
nulo
Valor: 1
Valor: 555
Valor: 333
Valor: 888
Valor: 555
Valor: nulo
Valor: nulo

Conjunto:
Set no permite ningún elemento duplicado y permite un único valor nulo. No mantendrá ningún orden para mostrar los elementos. TreeSet se mostrará en orden ascendente.

Ejemplo: (TreeSet)

 import java.util.TreeSet; public class SetExample { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet set = new TreeSet(); try { set.add("hello"); set.add("world"); set.add("welcome"); set.add("all"); for (String num : set) { System.out.println( num); } set.add(null); } catch (NullPointerException e) { System.out.println(e); System.out.println("Set doesn't allow null value and duplicate value"); } } } 

Salida:

todas
Hola
Bienvenido
mundo
java.lang.NullPointerException
Set no permite valor nulo y valor duplicado

Algunas notables diferencias dignas de mención entre List y Set en Java se dan de la siguiente manera:

1) La diferencia fundamental entre List y Set en Java es permitir elementos duplicados. La lista en Java permite duplicados, mientras que Set no permite ningún duplicado. Si inserta un duplicado en Set, reemplazará el valor anterior. Cualquier implementación de Set en Java solo contendrá elementos únicos.

2) Otra diferencia significativa entre List y Set en Java es el orden. La lista es una colección ordenada mientras que Set es una colección desordenada. La lista mantiene el orden de inserción de los elementos, significa que cualquier elemento que se inserte antes irá en un índice más bajo que cualquier elemento que se inserte después. Establecer en Java no mantiene ningún orden. Aunque Set proporciona otra alternativa llamada SortedSet que puede almacenar elementos de Set en un orden de clasificación específico definido por Comparable y métodos de comparación de Objetos almacenados en Set.

3) La implementación popular de la interfaz List en Java incluye ArrayList, Vector y LinkedList. Mientras que la implementación popular de la interfaz Set incluye HashSet, TreeSet y LinkedHashSet.

Es bastante claro que si necesita mantener el orden de inserción u objeto y su colección puede contener duplicados, List es un camino a seguir. Por otro lado, si su requisito es mantener una colección única sin ningún duplicado, Set es el camino a seguir.

Lista:

  1. Duplicados permitidos
  2. Ordenado en elementos de agrupación. (En otras palabras, tiene un orden definido. No es necesario ordenarlo en orden ascendente)

Conjunto:

  1. No permitido duplicados.
  2. Desordenado en elementos de agrupamiento. (En otras palabras, no tiene un orden definido. Puede o no ordenarse en orden ascendente)

Set y List se usan para almacenar elementos de tipo E La diferencia es que Set se almacena en forma desordenada y no permite valores duplicados. List se usa para almacenar elementos de forma ordenada y permite valores duplicados.

No se puede acceder a los elementos del Set mediante una posición de índice, y se puede acceder a los elementos de la List con una posición de índice.

Duplicidad

Set no permite duplicados. El conjunto y todas las clases que implementan la interfaz Set deben tener elementos únicos. La lista permite elementos duplicados. Se puede insertar cualquier número de elementos duplicados en la lista sin afectar los mismos valores existentes y sus índices.

Valores nulos

 List allows any number of null values. Set allows single null value at most 

Orden

La lista y todas sus clases de implementación mantienen el orden de inserción. El conjunto no mantiene ningún orden, aún algunas de sus clases clasifican los elementos en un orden como LinkedHashSet mantiene los elementos en orden de inserción y TreeSet (los elementos mantienen el orden ascendente por defecto)

implementaciones de clase

 List: ArrayList, LinkedList Set: HashSet, LinkedHashSet, TreeSet 

Diferencia basada en los siguientes puntos

1) Duplicidad: la lista permite elementos duplicados. Se puede insertar cualquier número de elementos duplicados en la lista sin afectar los mismos valores existentes y sus índices. Set no permite duplicados. El conjunto y todas las clases que implementan la interfaz Set deben tener elementos únicos.

2) Valores nulos: la lista permite cualquier cantidad de valores nulos. Set permite un único valor nulo como máximo.

3) Orden: la lista y todas sus clases de implementación mantienen el orden de inserción. Set no mantiene ningún orden; aún pocas de sus clases clasifican los elementos en un orden tal como LinkedHashSet mantiene los elementos en orden de inserción.

Hola. Ya se han dado muchas respuestas. Permítanme señalar algunos puntos que hasta ahora no se han mencionado:

  • La mayoría de las implementaciones de List (ArrayList, Vector) implementan la interfaz RandomAccess , que es una interfaz de marcador para un acceso más rápido. Ninguna de las implementaciones de List hace eso.
  • List utiliza un ListIterator especial llamado ListIterator que admite iteración en ambas direcciones . Set usa Iterator que solo admite iteración de 1 vía
  • HashSet toma 5.5 veces más memoria que ArrayList para almacenar la misma cantidad de elementos.

Aquí hay un claro ejemplo con groovy. creo un conjunto y una lista. luego trato de almacenar 20 valores generados aleatoriamente dentro de cada lista. el valor generado puede estar en el rango de 0 a 5

 s = [] as Set l = [] max = 5 print "random Numbers :" 20.times{ e = (int)Math.random()*max s < < e l << e print "$e, " } println "\n" println "Set : $s " println "list : $l 

El resultado :

Números aleatorios: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

Set: [4, 1, 0, 2, 3]

list: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

Puedes ver que la diferencia es que:

  • Set no permite valores duplicados.
  • Lista permite valores duplicados.

Al igual que la respuesta como SET, no tiene valor duplicado y List puede. Por supuesto, el orden es otra cosa diferente para ellos aparte.

Conjunto: Un conjunto no puede tener elementos duplicados en sus colecciones. también es una colección desordenada. Para acceder a los datos de Set, se requiere el uso de Iterator solamente y la recuperación basada en índices no es posible. Se usa principalmente cuando se requiere colección de singularidad.

Lista: una lista puede tener elementos duplicados, con el orden natural tal como se inserta. Por lo tanto, se pueden recuperar los datos basados ​​en el índice o el iterador. Se usa ampliamente para almacenar colecciones que necesitan acceder en función del índice.

TEMA Nombre: List VS Set

Acabo de analizar el tema más importante de Java, denominado Framework de Colecciones. Pensé compartir mi pequeño conocimiento acerca de Colecciones con usted. Lista, Conjunto, Mapa son el tema más importante de la misma. Comencemos con List and Set.

Diferencia entre Lista y Conjunto:

  1. List es una clase de colección que extiende la clase AbstractList donde Set es una clase de colección que extiende la clase AbstractSet pero ambas implementan la interfaz de Colección.

  2. La interfaz de lista permite valores duplicados (elementos) mientras que la interfaz de conjunto no permite valores duplicados. En el caso de elementos duplicados en Set, reemplaza los valores anteriores.

  3. La interfaz de lista permite valores NULOS cuando la interfaz Set no permite valores nulos. En caso de usar valores nulos en Set, da NullPointerException .

  4. La interfaz de lista mantiene el orden de inserción. Eso significa la manera en que agregamos los elementos en la Lista de la misma forma que lo obtenemos usando el iterador o para cada estilo. Mientras que las implementaciones de Set no mantienen necesariamente el orden de inserción. (Aunque SortedSet usa TreeSet y LinkedHashSet mantiene el orden de inserción).

  5. La interfaz de lista tiene sus propios métodos definidos, mientras que la interfaz de conjunto no tiene su propio método, por lo que Set solo utiliza métodos de interfaz de colección.

  6. La interfaz de lista tiene una clase heredada llamada Vector mientras que la interfaz Set no tiene ninguna clase heredada

  7. Por último, pero no menos importante … El método listIterator() solo se puede utilizar para recorrer los elementos dentro de List Classes, mientras que podemos usar el método iterator () para acceder a los elementos de la clase Set

¿Algo más podemos agregar? Por favor hagamelo saber.

Gracias.

Conjunto:

No puede haber valores duplicados El pedido depende de la implementación. Por defecto no está ordenado No puede tener acceso por índice

Lista:

Puede tener valores duplicados Pedido por defecto Puede tener acceso por índice