Quelle est la différence entre Set et List?

Quelle est la différence fondamentale entre les Set<E> et List<E> interfaces?

332
demandé sur JJJ 2009-06-24 00:32:10

26 réponses

List est une séquence ordonnée d'éléments alors que Set est une liste distincte des éléments qui est non ordonnée (merci, Quinn Taylor).

List<E>:

Une collection ordonnée (également appelée séquence). L'utilisateur de cette interface a un contrôle précis sur où dans le liste chaque élément est inséré. Le l'utilisateur peut accéder aux éléments par leur index entier (position dans la liste), et rechercher des éléments dans le liste.

Set<E>:

Une collection qui ne contient pas dupliquer les éléments. Plus formellement, les ensembles ne contiennent aucune paire d'éléments e1 et e2 tels que e1.égale (e2), et à plus un élément de valeur null. Comme le sous-entend son nom, cette interface modélise le Abstraction d'ensemble mathématique.

442
répondu Andrew Hare 2017-05-23 11:47:15
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
186
répondu Sergii Shevchyk 2013-08-01 12:31:42

Listes ordonnées d'éléments (uniques ou non)
se conformer à L'interface de Java nommée List
Peut être consulté par index

Implémenté en utilisant

  • LinkedList
  • ArrayList

Listes d'éléments uniques:
Conforme à Java de l'interface nommée Set
not peut-on Accéder à l'index

Implémenté en utilisant

  • HashSet (non ordonné)
  • LinkedHashSet (ordonné)
  • TreeSet (trié par ordre naturel ou par comparateur fourni)

Les deux interfaces Set et List sont conformes à L'interface de Java nommée Collection

65
répondu ivan_ivanovich_ivanoff 2016-07-21 06:07:17

Un ensemble ne peut pas contenir d'éléments en double alors qu'une liste le peut. Une liste (en Java) implique également l'ordre.

26
répondu Peter 2009-06-23 20:33:33
  • une liste est un regroupement ordonné d'éléments
  • Un ensemble est un regroupement non ordonné d'éléments sans doublons autorisés (généralement)

Conceptuellement, nous nous référons généralement à un regroupement non ordonné qui autorise les doublons en tant que sac et n'autorise pas les doublons est un ensemble.

16
répondu Hardwareguy 2009-06-23 20:41:09

Liste

  1. est un regroupement ordonné d'éléments.
  2. List est utilisé pour la collection d'éléments avec des doublons.
  3. les nouvelles méthodes sont définies dans la liste interface.

Ensemble

  1. est un regroupement non ordonné d'éléments.
  2. Set est utilisé pour la collection d'éléments sans doublons.
  3. Aucune nouvelle méthode n'est définie dans L'interface Set, Nous devons donc utiliser des méthodes D'interface de Collection uniquement avec des sous-classes Set.
10
répondu Shankar Suligavi 2011-11-17 07:14:45

Liste:

Lists autoriser généralement les objets en double. List s doivent être ordonnés, et sont donc accessibles par index.

Les classes D'implémentation incluent: ArrayList, LinkedList, Vector

Ensemble:

Sets do pas permettent de dupliquer des objets. La plupart des implémentations ne sont pas ordonnées, mais elles sont spécifiques à l'implémentation.

Les classes D'implémentation incluent: HashSet (non ordonné), LinkedHashSet (ordonné), TreeSet (commandé par ordre naturel ou fourni comparateur)

8
répondu csds 2014-06-16 18:12:20

Comme nous parlons des interfaces Java, pourquoi ne pas regarder le Javadoc ?!

  • a List est une collection ordonnée (séquence), qui permet généralement doublons
  • a {[1] } A est une collection qui ne contient pas d'éléments en double, d'itération l'ordre peut être garanti par la mise en œuvre

Il N'y a aucune mention sur le manque d'ordre concernant les ensembles: cela dépend de l'implémentation.

7
répondu Christophe Roussy 2013-12-02 15:27:43

Ce n'est peut-être pas la réponse que vous recherchez, mais le JavaDoc des classes collections est en fait assez descriptif. Copier / coller:

Une collection ordonnée (également appelée séquence). L'utilisateur de cette interface a un contrôle précis sur où dans le liste chaque élément est inséré. Le l'utilisateur peut accéder aux éléments par leur index entier (position dans la liste), et rechercher des éléments dans la liste.

Contrairement aux ensembles, les listes permettent généralement dupliquer élément. Plus formellement, les listes autorisent généralement des paires de éléments e1 et e2 tels que e1.est égal à(e2), et ils autoriser plusieurs éléments null s'ils autoriser les éléments null du tout. Il n'est pas inconcevable que quelqu'un pourrait souhaiter pour mettre en œuvre une liste qui interdit doublons, en lançant runtime exceptions lorsque l'utilisateur tente de insérez-les, mais nous nous attendons à cette utilisation pour être rares.

5
répondu Jeroen van Bergen 2009-06-23 20:38:23

Un ensemble est un groupe non ordonné d'objets distincts-aucun objet en double n'est autorisé. Il est généralement implémenté en utilisant le code de hachage des objets insérés. (Des implémentations spécifiques peuvent ajouter un ordre, mais l'interface Set elle-même ne le fait pas.)

Une liste est un groupe ordonné d'objets pouvant contenir des doublons. Il pourrait être mis en œuvre avec un ArrayList, LinkedList, etc.

5
répondu Quinn Taylor 2016-07-15 16:39:57

1.List autorise les valeurs en double et set n'autorise pas les doublons

2.Liste maintient l'ordre dans lequel vous avez inséré des éléments dans la liste Set ne maintient pas l'ordre. 3.List est une séquence ordonnée d'éléments alors que Set est une liste distincte d'éléments qui n'est pas ordonnée.

3
répondu Rakesh 2010-11-19 16:30:52

Toutes les classes List conservent l'ordre d'insertion. Ils utilisent différentes implémentations basées sur la performance et d'autres caractéristiques (par exemple ArrayList pour la vitesse d'accès d'un index spécifique, LinkedList pour simplement maintenir l'ordre). Comme il n'y a pas de clé, les doublons sont autorisés.

Les classes Set ne maintiennent pas l'ordre d'insertion. Ils peuvent éventuellement imposer un ordre spécifique (comme avec SortedSet), mais ont généralement un ordre défini par l'implémentation basé sur une fonction de hachage (comme avec HashSet). Étant donné que Sets sont accessibles par clé, les doublons ne sont pas autorisés.

2
répondu lavinio 2009-06-23 20:35:04

Liste Vs

1) Set n'autorise pas les doublons. Liste permet dupliquer. Basé sur L'implémentation de Set, il maintient également l'ordre d'insertion .

Par exemple: LinkedHashSet. Il maintient l'ordre d'insertion.Veuillez vous référer à Cliquez ici

2) contient la méthode. Par nature de L'ensemble, il donnera une meilleure performance à l'accès. Dans le meilleur des cas son o(1). Mais List a un problème de performance à invoquer contains.

2
répondu Siva Kumar 2014-09-08 11:41:57

Liste:
Liste permet de dupliquer les éléments et les valeurs null. Facile à rechercher en utilisant l'index correspondant des éléments et aussi il affichera les éléments dans l'ordre d'insertion. Exemple: (linkedlist)

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> 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);
    }
 }

}

Sortie:

1
1
555
333
888
555
null
null
Valeur: 1
Valeur: 555
Valeur: 333
Valeur: 888
Valeur: 555
Valeur: null
Valeur: null

Ensemble:
Set n'autorise aucun doublon éléments et il permettent null unique value.It ne conservera aucun ordre pour afficher les éléments.Seul TreeSet s'affiche dans l'ordre croissant.

Exemple: (TreeSet)

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    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");
    }

 }

}

Sortie:

Tous
bonjour
bienvenue
monde
Java.lang.NullPointerException
Set n'autorise pas la valeur null et la valeur dupliquée

2
répondu Indhu 2018-01-06 06:46:19

Commande... une liste a un ordre, pas un ensemble.

1
répondu Ricardo Marimon 2009-06-23 20:32:57

Quelques différences notables entre List et Set En Java sont données comme suit:

1) la différence fondamentale entre List et Set En Java permet de dupliquer des éléments. List en Java autorise les doublons tandis que Set n'autorise aucun doublon. Si vous insérez un doublon dans Set, il remplacera l'ancienne valeur. Toute implémentation de Set En Java ne contiendra que des éléments uniques.

2) une autre différence significative entre List et Set En Java est order. List est une Collection ordonnée tandis que Set est une Collection non ordonnée. La liste maintient l'ordre d'insertion des éléments, signifie que tout élément inséré avant ira sur un index inférieur à tout élément inséré après. Set En Java ne maintient aucun ordre. Bien que Set fournisse une autre alternative appelée SortedSet qui peut stocker des éléments Set dans un ordre de tri spécifique défini par des méthodes comparables et Comparatrices d'objets stockés dans Set.

3) mise en œuvre populaire de la liste interface en Java comprend ArrayList, Vector et LinkedList. Alors que l'implémentation populaire de l'interface Set comprend HashSet, TreeSet et LinkedHashSet.

Il est assez clair que si vous avez besoin de maintenir l'ordre d'insertion ou l'objet et que votre collection peut contenir des doublons, List est une solution. D'un autre côté, si votre exigence est de maintenir une collection unique sans doublons, Set est le chemin à parcourir.

1
répondu Vibha Sanskrityayan 2013-02-04 11:27:44

Liste:

  1. doublons autorisés.
  2. ordonné dans les éléments de regroupement.(En d'autres termes ayant défini order.No besoin de trier par ordre croissant)

Ensemble:

  1. pas permis doublons.
  2. Unordered dans les éléments de regroupement.(En d'autres termes n'ayant pas défini order.It peut ou ne peut pas être organisé dans l'ordre croissant)
1
répondu vijaybhupathi 2013-03-07 12:29:06

Set<E> et List<E> sont tous deux utilisés pour stocker des éléments de type E. La différence est que Set est stocké de manière non ordonnée et n'autorise pas les valeurs en double. List est utilisé pour stocker les éléments de manière ordonnée et il autorise les valeurs en double.

Set les éléments ne sont pas accessibles par un index de position, et List éléments peuvent être accessibles avec une position d'index.

0
répondu saibhushan 2012-07-24 15:21:57

La Duplicité

L'ensemble ne fonctionne pas autoriser les doublons. Ensemble et toutes les classes qui implémente l'interface Set doit avoir des éléments uniques. La liste permet de dupliquer les éléments. N'importe quel nombre d'éléments en double peut être inséré dans la liste sans affecter les mêmes valeurs existantes et leur index.

Valeurs nulles

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

Commande

Liste et toutes ses classes d'implémentation ordre d'insertion. Set ne conserve aucun ordre encore peu de ses classes trient les éléments dans un ordre tel que LinkedHashSet maintient les éléments dans l'ordre d'insertion et TreeSet (les éléments conservent l'ordre croissant Par défaut)

Les implémentations de la Classe

List: ArrayList, LinkedList 
Set: HashSet, LinkedHashSet, TreeSet 
0
répondu punitha 2015-09-21 07:19:21

Différence basée sur les points suivants

1) duplicité: liste permet des éléments en double. N'importe quel nombre d'éléments en double peut être inséré dans la liste sans affecter les mêmes valeurs existantes et leurs index. Set n'autorise pas les doublons. Set et toutes les classes qui implémentent Set interface doivent avoir des éléments uniques.

2) valeurs Null: List permet un nombre quelconque de valeurs null. Set permet une seule valeur nulle au maximum.

3) Ordre: liste et tous ses les classes d'implémentation maintiennent l'ordre d'insertion. Set ne maintient aucun ordre; encore peu de ses classes trient les éléments dans un ordre tel que LinkedHashSet maintient les éléments dans l'ordre d'insertion.

0
répondu Manish Butola 2016-02-16 03:42:57

Salut tant de réponses sont déjà données..Permettez-moi de souligner certains points qui ne sont pas mentionnés jusqu'à présent:

  • la plupart des implémentations de liste (ArrayList,Vector) implémentent RandomAccess interface qui est une interface de marqueur pour un accès plus rapide. Aucune des implémentations de liste ne le fait.
  • List utilise un itérateur spécial appelé ListIterator qui supporte l'itération dans les deux sens . Set utilise Iterator qui ne prend en charge que l'itération à 1 sens
  • HashSet prend 5.5 fois plus de mémoire {[7] } que ArrayList pour le stockage même nombre d'éléments.
0
répondu smruti ranjan 2016-11-14 04:02:40

Voici un exemple clair avec groovy. je crée un ensemble et une liste. ensuite, j'essaie de stocker 20 valeur générée aléatoirement dans chaque liste. la valeur générée peut être comprise entre 0 et 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

Le résultat :

De Nombres Aléatoires: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

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

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

, Vous pouvez voir que la différence est que:

  • Set n'autorise pas les valeurs en double.
  • liste autoriser les valeurs en double.
-1
répondu justice 2013-06-07 09:59:34

Comme la réponse comme définie n'a pas de valeur en double et la liste peut. Bien sûr, l'ordre est une autre chose à les différents à part.

-1
répondu Hongtao 2015-04-08 17:40:59

Ensemble: Un ensemble ne peut pas avoir D'éléments en double dans ses collections. c'est aussi une collection non ordonnée. Pour accéder aux données de Set, il est nécessaire d'utiliser Iterator uniquement et la récupération basée sur l'index n'est pas possible pour cela. Il est principalement utilisé chaque fois que nécessaire collection unicité.

Liste: Une liste peut avoir des éléments en double, avec le naturel ordonné comme il est inséré. Ainsi, il peut être récupéré des données basées sur l'index ou l'itérateur. Il est largement utilisé pour stocker la collection qui doit accéder en fonction de l'index.

-1
répondu Arvind Chavhan 2015-09-21 06:35:31

Nom du sujet: liste VS Ensemble

Je viens de passer par le sujet le plus important de Java appelé Collections Framework. J'ai pensé partager mes connaissances sur les Collections avec vous. Liste, Ensemble, carte sont le sujet le plus important de celui-ci. Commençons donc par List and Set.

Différence entre la liste et L'Ensemble:

  1. List est une classe de collection qui étend la classe AbstractList Où as Set est une classe de collection qui étend la classe AbstractSet mais les deux implémente la Collection interface.

  2. L'interface List permet des valeurs en double (éléments) tandis que L'Interface Set n'autorise pas les valeurs en double. Dans le cas d'éléments dupliqués dans Set, il remplace les anciennes valeurs.

  3. L'interface de liste permet des valeurs NULL où as Set interface n'autorise pas les valeurs Null. En cas d'utilisation de valeurs Null dans Set, il donne NullPointerException.

  4. L'interface de liste maintient l'ordre d'insertion. Cela signifie que la façon dont nous ajoutons les éléments dans la liste de la même manière que nous obtenez-le en utilisant iterator ou pour chaque style. Alors que les implémentations Set ne maintiennent pas nécessairement l'ordre d'insertion. (Bien que {[4] } utilise TreeSet et que LinkedHashSet conserve l'ordre d'insertion).

  5. List interface a ses propres méthodes définies alors que Set interface n'a pas sa propre méthode donc Set utilise uniquement des méthodes D'interface de Collection.

  6. List interface a une classe héritée appelée Vector alors que Set interface n'a aucun héritage classe

  7. Dernier point mais non le moins... La méthode listIterator() ne peut être utilisée que pour faire défiler les éléments dans les Classes List alors que nous pouvons utiliser la méthode iterator() pour accéder aux éléments de classe Set

Autre chose peut-on ajouter? S'il vous plaît laissez-moi savoir.

Merci.

-2
répondu user3542872 2014-06-16 18:19:20

Ensemble:

Ne peut pas avoir de valeurs en double La commande dépend de la mise en œuvre. Par défaut, il n'est pas commandé Impossible d'avoir accès par index

Liste:

Peut avoir des valeurs en double Commandé par défaut Peut avoir accès par index

-3
répondu user2142109 2014-06-14 20:35:42