Maison  >  Article  >  Java  >  Introduction à l'utilisation et aux différences de Set, List et Map en Java

Introduction à l'utilisation et aux différences de Set, List et Map en Java

高洛峰
高洛峰original
2017-01-22 15:19:461647parcourir

Interface de collection : Collection est l'interface de collection la plus basique, qui déclare les méthodes courantes applicables aux collections JAVA (y compris uniquement Set et List). Set et List héritent tous deux des méthodes d'interface Collection, Map

Collection :

boolean add(Object o) : Ajouter une référence à un objet à la collection
void clear() : Supprimer tout les objets de la collection ne contiennent plus de références à ces objets
boolean isEmpty() : Déterminez si la collection est vide
boolean contain(Object o) : Déterminez si la collection contient des références à des objets spécifiques
Iterartor iterator( ) : Renvoie un objet Iterator, qui peut être utilisé pour parcourir les éléments de la collection
boolean remove(Object o) : Supprime une référence à un objet de la collection

int size() : Renvoie le collection Le nombre d'éléments dans

Object[] toArray() : renvoie un tableau qui inclut tous les éléments de la collection

À propos : les méthodes Iterator() et toArray() sont toutes deux utilisées pour les collections Tous les éléments de la collection, le premier renvoie un objet Iterator et le second renvoie un tableau contenant tous les éléments de la collection.

L'interface Iterator déclare les méthodes suivantes :

hasNext() : Détermine si les éléments de la collection ont été parcourus. Sinon, renvoie true
next() : Renvoie le suivant. element
remove() : supprime l'élément précédent renvoyé par la méthode next() de la collection.

Set (set) : Set est le type d'ensemble le plus simple. Les objets de la collection ne sont pas classés d’une manière particulière et il n’y a pas d’objets en double. L'interface Set implémente principalement deux classes d'implémentation :

HashSet : la classe HashSet accède aux objets de l'ensemble selon l'algorithme de hachage, et la vitesse d'accès est relativement rapide.

TreeSet : la classe TreeSet implémente SortedSet Interface capable de trier les objets dans une collection.

Utilisation de Set : stocke les références aux objets, pas d'objets en double

Set set=new HashSet();
String s1=new String("hello");
String s2=s1;
String s3=new String("world");
set.add(s1);
set.add(s2);
set.add(s3);

System.out.println(set.size());// Imprime le nombre d'objets dans la collection comme 2.
Comment la méthode add() de Set détermine-t-elle si l'objet a été stocké dans la collection ?

boolean isExists=false;
Iterator iterator=set.iterator();
while(it.hasNext()) {
String oldStr=it.next();
if(newStr.equals(oldStr)){
isExists=true;
}
}

List (list) : La caractéristique de List est que ses éléments sont stockés de manière linéaire et que des objets répétés peuvent être stockés dans la collection.

Les principales classes d'implémentation de l'interface List incluent :
ArrayList() : représente un tableau dont la longueur peut être modifiée. Les éléments sont accessibles de manière aléatoire, et l'insertion et la suppression d'éléments dans ArrayList() sont lentes.
LinkedList() : utilise la structure de données de liste chaînée dans l'implémentation. L'insertion et la suppression sont rapides, l'accès est lent.

Pour un accès aléatoire à List, il récupère uniquement de manière aléatoire les éléments situés à des positions spécifiques. La méthode get(int index) de List renvoie l'objet à la position d'index spécifiée par le paramètre index dans la collection, et l'indice commence à "0". Les deux méthodes les plus basiques pour récupérer tous les objets d'une collection :

1 : boucle for et méthode get() :

for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}

2 : utilisation d'itérateurs (Iterator ):

Iterator it=list.iterator();
while(it.hashNext){
System.out.println(it.next);
}

Carte : La carte est une collection d'objets clés et d'objets de valeur. Chaque élément de celle-ci contient une paire d'objets clés et d'objets de valeur.
Map n'hérite pas de l'interface Collection. Lors de la récupération d'éléments de la collection Map, tant que l'objet clé est donné, l'objet valeur correspondant sera renvoyé.

Méthodes courantes de Map :

1 Opérations d'ajout et de suppression :

Object put (Object key, Object value) : Ajouter des éléments à la collection
Object Remove( Clé d'objet) : Supprimez les éléments liés à KEY
void putAll(Map t) : Ajoutez tous les éléments d'une image spécifique à cette image
void clear() : Supprimez tous les mappages de l'image

2 Opération de requête :

Object get(Object key) : récupère la valeur liée au mot-clé clé. Les objets clés de la collection Map ne peuvent pas être répétés. En d'autres termes, le résultat de la comparaison de deux objets clés via la méthode equals() est faux. Cependant, plusieurs clés peuvent être mappées exclusivement sur le même objet de valeur.

Collections : classe utilitaire de collection. Les collections fournissent des méthodes statiques pratiques pour les collections JAVA

Résumé :

L'utilisation de base des collections JAVA a été résumée ci-dessus. Il existe d'autres collections spécifiques. à la documentation d'aide du JDK Haha, il existe de nombreuses applications de Map, en particulier celle-ci fournit de nombreuses méthodes pratiques de List/Map, qui sont très utiles pour le développement quotidien.

boolean containKey(Object key) : Déterminez si la clé du mot-clé existe dans l'image
boolean containValue(Object value) : Déterminez si la valeur value existe dans l'image
int size() : Return à l'image actuelle Nombre de mappages
boolean isEmpty() : Détermine s'il y a des mappages dans l'image

La liste enregistre les objets dans l'ordre dans lequel ils sont saisis, sans opérations de tri ni d'édition. Set n'accepte chaque objet qu'une seule fois et utilise sa propre méthode de tri interne (généralement, vous vous souciez uniquement de savoir si un élément appartient à l'ensemble, pas son ordre - sinon vous devez utiliser une liste).
Map enregistre également une copie de chaque élément, mais celle-ci est basée sur la "clé". Map a également un tri intégré, il ne se soucie donc pas de l'ordre dans lequel les éléments sont ajoutés. Si l'ordre dans lequel les éléments sont ajoutés est important pour vous, vous devez utiliser LinkedHashSet ou LinkedHashMap

Méthodes fonctionnelles de List :
Il existe en fait deux types : l'un est l'ArrayList de base, qui a l'avantage. d'éléments accédant de manière aléatoire. L'autre est la LinkedList plus puissante, qui n'est pas conçue pour un accès aléatoire rapide, mais dispose d'un ensemble de méthodes plus générales.

List : L'ordre est la fonctionnalité la plus importante de List : il garantit que l'ordre spécifique des éléments est maintenu. List ajoute de nombreuses méthodes à Collection, permettant d'insérer et de supprimer des éléments du milieu de la liste (cela n'est recommandé que pour LinkedList.) Une liste peut générer un ListIterator, qui peut être utilisé pour parcourir la liste dans deux directions, et peut également être inséré et déplacé depuis le milieu de la liste Supprimer des éléments.
ArrayList : Liste implémentée par tableau. Permet un accès aléatoire rapide aux éléments, mais insère et supprime très lentement des éléments du milieu de la liste. ListIterator ne doit être utilisé que pour parcourir ArrayList d’arrière en avant, et non pour insérer et supprimer des éléments. Parce que c'est beaucoup plus cher que LinkedList.
LinkedList : l'accès séquentiel est optimisé et la surcharge liée à l'insertion et à la suppression au milieu de la liste n'est pas importante. L'accès aléatoire est relativement lent. (Utilisez plutôt ArrayList.) Possède également les méthodes suivantes : addFirst(), addLast(), getFirst(), getLast(), removeFirst() et removeLast(), qui (non définies dans aucune interface ou classe de base) permettent à LinkedList de pouvoir être utilisé comme pile, file d'attente et deque.

Méthodes fonctionnelles de Set :
Set a exactement la même interface que Collection, il n'a donc pas de fonctions supplémentaires, contrairement aux deux listes différentes auparavant. En fait, Set est Collection, mais son comportement est différent. (Il s'agit d'une application typique de l'héritage et des idées polymorphes : montrer des comportements différents.) Set ne sauvegarde pas les éléments en double (quant à la façon de juger que les éléments sont les mêmes, c'est plus responsable)

Set : Chaque L'élément stocké dans Set doit être unique car Set n'enregistre pas les éléments en double. Les éléments ajoutés au Set doivent définir la méthode equals() pour garantir l'unicité de l'objet. Set et Collection ont exactement la même interface. L'interface Set ne garantit pas que l'ordre des éléments soit conservé.
HashSet : ensemble conçu pour une recherche rapide. Les objets stockés dans HashSet doivent définir hashCode().
TreeSet : un ensemble qui enregistre la commande. La couche inférieure est une structure arborescente. Utilisez-le pour extraire une séquence ordonnée d’un ensemble.

LinkedHashSet : a la vitesse de requête de HashSet et utilise en interne une liste chaînée pour maintenir l'ordre des éléments (l'ordre d'insertion). Ainsi, lorsque vous utilisez un itérateur pour parcourir l'ensemble, les résultats seront affichés dans l'ordre dans lequel les éléments ont été insérés.

Méthodes de fonction de Map :

La méthode put(Object key, Object value) ajoute une "valeur" (ce que vous souhaitez obtenir) et la "clé" associée à la "valeur" ) (utilisez-le pour trouver). La méthode get(Object key) renvoie la "valeur" associée à la "clé" donnée. Vous pouvez utiliser containKey() et containValue() pour tester si la carte contient une certaine "clé" ou "valeur".
La bibliothèque de classes Java standard contient plusieurs Maps différentes : HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap. Ils ont tous la même interface de base Map, mais leur comportement, leur efficacité, leur stratégie de tri, leur cycle de vie des objets enregistrés et leurs stratégies de détermination de l'équivalence « clé » sont différents.
L'efficacité d'exécution est un gros problème pour Map. Si vous regardez ce que fait get(), vous comprendrez pourquoi la recherche d'une "clé" dans une ArrayList est assez lente. Et c'est là que HashMap améliore la vitesse. HashMap utilise des valeurs spéciales, appelées codes de hachage, pour remplacer la recherche lente des clés.
Le "code de hachage" est une valeur int "relativement unique" utilisée pour représenter un objet. Il est généré en convertissant certaines informations sur l'objet. Tous les objets Java peuvent générer des codes de hachage car hashCode() est une méthode définie dans la classe de base Object.
HashMap utilise le hashCode() de l'objet pour une requête rapide. Cette approche peut améliorer considérablement les performances.

Map : maintient la corrélation des "paires clé-valeur", vous permettant de trouver des "valeurs" via des "clés"

HashMap : La carte est basée sur une implémentation de table de hachage. Le coût d’insertion et d’interrogation des paires clé-valeur est fixe. La capacité et le facteur de charge peuvent être définis par le constructeur pour ajuster les performances du conteneur.
LinkedHashMap : similaire à HashMap, mais lors d'une itération, l'ordre dans lequel les "paires clé-valeur" sont obtenues est leur ordre d'insertion, ou l'ordre le moins récemment utilisé (LRU). Seulement légèrement plus lent que HashMap. L'accès itératif est plus rapide car il utilise une liste chaînée pour maintenir l'ordre interne.
TreeMap : Implémentation basée sur une structure de données arborescente rouge-noir. Lors de l'affichage des "clés" ou des "paires clé-valeur", elles sont triées (l'ordre est déterminé par Comparabel ou Comparator). La particularité de TreeMap est que les résultats que vous obtenez sont triés. TreeMap est la seule Map avec une méthode subMap(), qui peut renvoyer un sous-arbre.
WeakHashMap : carte à clé faible, les objets utilisés dans la carte peuvent également être libérés : ceci est conçu pour résoudre des problèmes particuliers. S'il n'y a aucune référence en dehors de la carte pointant vers une "clé", cette "clé" peut être recyclée par le garbage collector.

IdentifyHashMap : Une carte de hachage qui utilise == au lieu de equals() pour comparer les "clés". Conçu pour résoudre des problèmes spéciaux.

Pour plus d'articles sur l'utilisation et les différences de Set, List et Map en Java, veuillez prêter attention au site Web PHP 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