Quelle est la différence fondamentale entre les interfaces Set<E>
et List<E>
?
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 ).
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.
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.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
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
Listes d'éléments uniques:
Conforme à l'interface de Java nommée Set
Peut not être accessible par index
implémenté en utilisant
Les deux interfaces Set
et List
sont conformes à l'interface de Java nommée Collection
.
Un ensemble ne peut pas contenir d'éléments en double, contrairement à une liste. Une liste (en Java) implique également un ordre.
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.
Liste
Ensemble
List
s permettent généralement les objets en double. List
s doivent être commandés et sont donc accessibles par index.
Les classes d'implémentation incluent: ArrayList
, LinkedList
, Vector
Set
s 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)
Comme nous parlons des interfaces Java, pourquoi ne pas regarder le Javadoc?!
List
est une collection ordonnée (séquence), qui permet généralement les doublonsSet
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.
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.
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.
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
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.
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
.
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 Set
s sont accessibles par clé, les doublons ne sont pas autorisés.
Commande ... une liste a une commande, pas un ensemble.
Liste:
Ensemble:
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.
Bonjour, Tellement de réponses sont déjà données. Permettez-moi de souligner quelques points qui n’ont pas encore été mentionnés:
RandomAccess
interface qui est une interface de marqueur pour un accès plus rapide. Aucune des implémentations de Set ne fait cela.ListIterator
qui prend en charge l’itération dans les deux sens. Set utilise Iterator qui ne prend en charge qu'une itération à sens uniqueSet<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.