web-dev-qa-db-fra.com

Quelle est la différence entre Set et List?

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

386
Johanna

List est une séquence ordonnée d'éléments alors que Set est une liste distincte d'éléments non ordonnés (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 l'endroit où chaque élément est inséré dans la liste. L'utilisateur peut accéder aux éléments par leur index entier (position dans la liste) et rechercher des éléments dans la liste.

Set<E>:

Une collection qui ne contient aucun élément en double. Plus formellement, les ensembles ne contiennent pas de paire d'éléments e1 et e2 tels que e1.equals (e2) et au plus un élément null. Comme son nom l'indique, cette interface modélise l'abstraction d'ensembles mathématiques.

478
Andrew Hare
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
209
Sergii Shevchyk

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

implémenté en utilisant

  • LinkedList
  • Liste des tableaux

Listes d'éléments uniques:
Conforme à l'interface de Java nommée Set
Peut not être accessible par index

implémenté en utilisant

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

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

69

Un ensemble ne peut pas contenir d'éléments en double, contrairement à une liste. Une liste (en Java) implique également un ordre.

27
Peter
  • Une liste est un groupe ordonné d'éléments
  • Un ensemble est un regroupement non ordonné d'éléments sans doublons (généralement).

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

16
Hardwareguy

Liste

  1. Est un groupement ordonné d'éléments.
  2. La liste est utilisée pour la collecte d'éléments avec des doublons.
  3. De nouvelles méthodes sont définies dans l'interface List.

Ensemble

  1. Est un groupement non ordonné d'éléments.
  2. Set est utilisé pour la collecte d'éléments sans doublons.
  3. Aucune nouvelle méthode n'est définie dans l'interface Set. Nous devons donc utiliser les méthodes d'interface Collection uniquement avec les sous-classes Set.
10
Shankar Suligavi

Liste:

Lists permettent généralement les objets en double. Lists doivent être commandés et sont donc accessibles par index.

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

Ensemble:

Sets do not autorise les objets en double. La plupart des implémentations ne sont pas ordonnées, mais cela est spécifique à l'implémentation.

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

9
csds

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

  • Un List est une collection ordonnée (séquence), qui permet généralement les doublons
  • Une collection Set a ne contenant aucun élément en double, l'ordre des itérations peut être garanti par la mise en œuvre.

Il n’ya AUCUNE mention concernant le manque d’ordre concernant les Sets: cela dépend de la mise en oeuvre.

7

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 pas l'interface Set elle-même.)

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

5
Quinn Taylor

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

Une collection ordonnée (également appelée séquence). L'utilisateur de cette interface a un contrôle précis sur l'endroit où chaque élément est inséré dans la liste. 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 autorisent généralement les éléments en double. Plus formellement, les listes autorisent généralement des paires d'éléments e1 et e2 telles que e1.equals (e2) et autorisent généralement plusieurs éléments nuls si elles autorisent des éléments nuls. Il n'est pas inconcevable que quelqu'un souhaite implémenter une liste interdisant les doublons en lançant des exceptions d'exécution lorsque l'utilisateur tente de les insérer, mais nous nous attendons à ce que cet usage soit rare.

5
Jeroen van Bergen

Liste:
La liste permet les éléments en double et les valeurs NULL. Facile à rechercher en utilisant l'index correspondant des éléments et aussi affichera les éléments dans l'ordre d'insertion. Exemple: (liste liée)

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
nul
nul
Valeur: 1
Valeur: 555
Valeur: 333
Valeur: 888
Valeur: 555
Valeur: null
Valeur: null

Set:
Set n'autorise aucun élément en double ni une valeur null unique. Il ne conserve aucun ordre d'affichage des éléments.Seulement TreeSet s'affiche dans un 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:

tout
salut
Bienvenue
monde
Java.lang.NullPointerException
L'ensemble n'autorise pas les valeurs Null et les doublons

4
Indhu

1.Liste autorise les doublons et ne permet pas les doublons

2.List conserve 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 non ordonnés.

3
Rakesh

List Vs Set

1) L'ensemble n'autorise pas les doublons. La liste permet de dupliquer. Basé sur la mise en œuvre de Set, il conserve é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 . De par sa nature, cela donnera de meilleures performances d'accès. Le meilleur des cas c'est o (1). Mais List a des problèmes de performances pour invoquer contains.

3
Siva Kumar

Toutes les classes List conservent l'ordre d'insertion. Ils utilisent différentes implémentations basées sur les performances et d’autres caractéristiques (par exemple, ArrayList pour la rapidité d’accès à 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 conservent 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
lavinio

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

1
Ricardo Marimon

Liste:

  1. Doublons autorisés.
  2. Ordonné en regroupant les éléments.

Ensemble:

  1. Non autorisé les doublons.
  2. Non ordonné dans les éléments de regroupement. (En d'autres termes, n'ayant pas d'ordre défini
1
vijaybhupathi

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

1) La différence fondamentale entre List et Set in Java autorise les éléments en double. La liste dans Java autorise les doublons, tandis que Set n'autorise aucun doublon. Si vous insérez une copie dans Set, elle remplacera l'ancienne valeur. Toute implémentation de Set in Java ne contiendra que des éléments uniques.

2) Une autre différence significative entre List et Set dans Java est l’ordre. La liste est une collection ordonnée alors que Set est une collection non ordonnée. La liste conserve l’ordre d’insertion des éléments, signifie que tout élément inséré avant ira à un index inférieur à tout élément inséré après. Défini dans Java ne conserve aucun ordre. Bien que Set fournisse une autre alternative appelée SortedSet qui peut stocker les éléments de Set dans un ordre de tri spécifique défini par les méthodes Comparable et Comparator des objets stockés dans Set.

) L'implémentation populaire de l'interface de liste dans Java inclut ArrayList, Vector et LinkedList. Tandis que l'implémentation populaire de l'interface Set inclut HashSet, TreeSet et LinkedHashSet.

Il est clair que si vous avez besoin de maintenir l'ordre d'insertion ou l'objet et que votre collection peut contenir des doublons, la liste est une solution. D'autre part, si votre exigence est de maintenir une collection unique sans doublons, Set est la voie à suivre.

1
Vibha Sanskrityayan

Bonjour, Tellement de réponses sont déjà données. Permettez-moi de souligner quelques points qui n’ont pas encore été mentionnés:

  • La plupart des implémentations de liste (ArrayList, Vector) implémente RandomAccess interface qui est une interface de marqueur pour un accès plus rapide. Aucune des implémentations de Set ne fait cela.
  • La liste utilise un itérateur spécial appelé ListIteratorqui prend en charge l’itération dans les deux sens. Set utilise Iterator qui ne prend en charge qu'une itération à sens unique
  • HashSet prend 5.5 fois plus de mémoire que ArrayList pour stocker le même nombre d'éléments.
0
smruti ranjan

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 permet les doublons.

Les éléments Set ne sont pas accessibles avec une position d'index et les éléments List sont accessibles avec une position d'index.

0
saibhushan