Maison  >  Article  >  Java  >  La différence entre les interfaces d'ensemble et de liste dans Java Collection

La différence entre les interfaces d'ensemble et de liste dans Java Collection

王林
王林original
2019-11-25 11:04:373500parcourir

La différence entre les interfaces d'ensemble et de liste dans Java Collection

Essentiellement, List et Set sont des interfaces et héritent de l'interface Collection. Les ArrayList et HashSet que nous utilisons souvent héritent respectivement des interfaces List et Set. En raison de l'utilisation de génériques, le type réel peut être spécifié pour une utilisation dans des applications réelles. Habituellement, nous les utilisons pour stocker des objets. Bien sûr, Map est également utilisé plus souvent. Ils fournissent tous des interfaces pour l'insertion, la suppression et la recherche, et prennent en charge l'utilisation d'Iterator. Alors, quelle est la différence entre List et Set, et comment les distinguer lors de leur utilisation ?

La différence entre List et Set

(1) Une différence très importante entre List et Set est de savoir si les éléments en double sont autorisés à exister. Dans List, les éléments en double peuvent être insérés, tandis que. dans Set, les éléments en double ne sont pas autorisés et seront remplacés même si le même élément est inséré. J'ai vérifié que les mêmes éléments sont insérés respectivement dans ArrayList et HashSet :

HashSet<String> hset = new HashSet<String>();
ArrayList<String> arrlst = new ArrayList<String>();
 
hset.add("hello");
hset.add("hello");
 
arrlst.add("hello");
arrlst.add("hello");
 
System.out.println("hset size: "+hset.size()+" toString: "+hset.toString());
System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());

Résultats d'exécution :

La différence entre les interfaces densemble et de liste dans Java Collection

PS : Si vous regardez le code source du JDK , vous verrez l'implémentation de HashSet Cela se fait via HashMap.

Recommandation vidéo d'apprentissage Java : Démarrez avec Java

(2) Une autre différence très importante entre List et Set est liée à l'ordre dans lequel les éléments sont stockés. List est une collection ordonnée, tandis que Set est une collection non ordonnée. List conservera l'ordre dans lequel les éléments sont insérés, c'est-à-dire que l'index des éléments insérés précédemment est plus petit que l'index des éléments insérés ultérieurement. Set ne conserve pas l’ordre d’insertion. De même, vérifions :

HashSet<String> hset = new HashSet<String>();
ArrayList<String> arrlst = new ArrayList<String>();
 
hset.add("1");
hset.add("3");
hset.add("2");
 
arrlst.add("1");
arrlst.add("3");
arrlst.add("2");
 
System.out.println("hset size: "+hset.size()+" toString: "+hset.toString());
System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());

Résultats d'exécution :

La différence entre les interfaces densemble et de liste dans Java Collection

PS : ArrayList utilise des tableaux d'objets pour stocker des objets, en insérant de nouveaux à chaque fois. sera inséré à la taille ; comme pour HashSet, comme mentionné précédemment, il est implémenté via HashMap. L'objet stocké est utilisé comme clé de HashMap. Si la clé est la même, la valeur sera remplacée. Bien entendu, SortedSet (qui hérite de l'interface Set) peut enregistrer les éléments selon un tri spécifié.

(3) La liste est accessible via les indices, mais pas Set.

Les classes d'implémentation courantes de l'interface List incluent ArrayList, Vector et LinkedList, tandis que les classes d'implémentation courantes de l'interface Set incluent HashSet, TreeSet et LinkedHashSet.

Plus de recommandations d'articles sur Java : Tutoriel d'introduction à Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn