Maison Java javaDidacticiel Collection Java : résumé des quatre systèmes Set, List, Queue et Map

Collection Java : résumé des quatre systèmes Set, List, Queue et Map

Aug 08, 2018 am 10:51 AM
java集合

Les collections Java sont grossièrement divisées en quatre systèmes : Set, List, Queue et Map

Parmi eux, Set représente une collection non ordonnée et non répétable ; List représente une collection ordonnée et répétitive ; Map représente un mappage. Une collection de relations ; Queue est l'implémentation d'une file d'attente.

Les collections sont différentes des tableaux. Les éléments du tableau peuvent être soit des valeurs de type de base, soit des objets (en fait, ils enregistrent les variables de référence des objets). Les collections ne peuvent stocker que des objets (en fait, elles stockent uniquement des variables de référence). ).

Il existe deux interfaces dérivées dans les collections Java : Collection et Map
Arbre d'héritage du système de collection Collection :

Collection Java : résumé des quatre systèmes Set, List, Queue et Map Arbre d'héritage du système de collection Map :
Collection Java : résumé des quatre systèmes Set, List, Queue et Map

Ce qui suit décrit la
Collection Set :
La collection Set est similaire à un jar, le programme Vous pouvez y "lancer" plusieurs objets dans l'ordre. Set ne se souviendra pas de l'ordre dans lequel les éléments sont ajoutés et les collections Set n'autorisent pas les mêmes éléments.

HashSet :
Caractéristiques :
L'ordre des éléments n'est pas garanti
HashSet n'est pas synchronisé
La valeur de l'élément définie peut être nulle
La norme permettant à HashSet de déterminer l'égalité de deux éléments est la suivante : Les deux objets sont comparés égaux via la méthode equals(), et les valeurs de retour de la méthode hashcode() des deux objets sont également égales .
Remarque : lorsque vous placez un objet dans un HashSet, si vous devez remplacer la méthode equals() de l'objet, vous devez remplacer sa méthode hashCode(). La règle est la suivante : si deux objets sont comparés et renvoient true via la méthode equals(), les valeurs hashCode des deux objets doivent être les mêmes.

LinkedSet :
LinkedSet détermine l'emplacement de stockage des éléments en fonction de la valeur hashCode d'origine, mais il utilise également une liste chaînée pour maintenir l'ordre des éléments , afin que les éléments L'ordre d'insertion soit conservé. LinkedSet accède aux éléments de l'ensemble dans l'ordre dans lequel ils sont ajoutés.
LinkedSet doit maintenir la position d'insertion des éléments, les performances seront donc légèrement inférieures à celles de HashSet.

TreeSet :
TreeSet garantit que les éléments de la collection sont dans un état trié.
TreeSet n'est pas trié selon l'ordre d'insertion des éléments, mais selon la valeur réelle des éléments.
TreeSet utilise la structure de données arborescente rouge-noir pour stocker les éléments de l'ensemble.
TreeSet prend en charge deux méthodes de tri : le tri naturel et le tri personnalisé. Par défaut, TreeSet utilise l'ordre naturel.

Tri naturel : TreeSet appellera la méthode compareTo (Object obj) des éléments de la collection pour comparer la relation de taille entre les éléments, puis organisera les éléments de la collection par ordre croissant. Par défaut, TreeSet utilise l'ordre naturel.
Lorsqu'un objet est ajouté à la collection TreeSet, TreeSet appelle la méthode compareTo (Object obj) de l'objet pour comparer la taille avec d'autres objets dans le conteneur, puis trouve son emplacement de stockage en fonction de l'arborescence rouge-noir .
Le seul critère pour juger si deux objets sont égaux est : Si la comparaison de deux objets via la méthode compareTo (Object obj) renvoie 0.
Si la comparaison de deux objets via la méthode equals() renvoie true, la comparaison des deux objets via la méthode compareTo(Object obj) devrait renvoyer 0.

Tri personnalisé : Si vous devez implémenter un tri personnalisé, vous devez fournir un objet Comparator associé à la collection TreeSet lorsque vous créez l'objet de collection TreeSet. L'objet Comparator est responsable de la logique de tri des éléments de la collection. .

EnumSet :
Les éléments de collection d'EnumSet sont également ordonnés. EnumSet détermine l'ordre des éléments de collection en fonction de l'ordre de positionnement des valeurs d'énumération au sein de la classe Enum.
EnumSet est stocké en interne sous forme de vecteurs de bits.
La collection EnumSet ne permet pas d'ajouter des éléments nuls.

Analyse des performances de chaque classe d'implémentation Set :
Les performances de HashSet sont toujours meilleures que celles de TreeSet, car TreeSet nécessite un algorithme d'arbre rouge-noir supplémentaire pour maintenir l'ordre de l'ensemble.
LinkedSet Pour les opérations d'insertion et de suppression ordinaires, LinkedSet est légèrement plus lent que HashSet. Cela est dû à la surcharge supplémentaire causée par la maintenance de la liste chaînée. Mais grâce à la liste chaînée, la traversée du LinkedSet est plus rapide.
EnumSet a les meilleures performances, mais il ne peut enregistrer que les valeurs d'énumération de la même classe d'énumération que les éléments de l'ensemble.

Liste :
La liste représente une combinaison ordonnée et répétable d'éléments. Chaque élément de l'ensemble a un index séquentiel correspondant.
La collection List peut accéder aux éléments de la collection en fonction de l'index de position, donc la liste peut être parcourue à l'aide de la boucle for.

ArrayList, LinkedList et Vector
Analyse du code source d'ArrayList :
Analyse du code source de LinkedList :

File d'attente :
La file d'attente est utilisée. Elle est utilisée pour simuler la structure des données de la file d'attente.
PriorityQueue :
L'ordre dans lequel les éléments de la file d'attente sont enregistrés par PriorityQueue n'est pas dans l'ordre de jointure, mais en fonction de la taille des éléments de la file d'attente.
PriorityQueue n'autorise pas l'insertion d'éléments nuls.

Deque :
L'interface Deque est une sous-interface de l'interface Queue, qui représente une file d'attente à double extrémité.
Lorsqu'une structure de données telle qu'une "pile" doit être utilisée dans un programme, il est recommandé d'utiliser ArrayDeque.

Analyse des performances de diverses tables linéaires :
1 Si vous devez parcourir des éléments de la collection List, pour les collections ArrayList et Vector, vous devez utiliser la méthode d'accès aléatoire (get) pour parcourir la collection. éléments, afin que les performances soient meilleures ; pour les collections LinkedList, vous devez utiliser un itérateur pour parcourir les éléments de la collection.
2. Si vous devez effectuer fréquemment des insertions et des suppressions, LinkedList doit être utilisé.
3. Si plusieurs threads accèdent aux éléments de la collection List en même temps, Collections doit être utilisé pour envelopper la collection dans une collection thread-safe.

Map :
Les clés de carte ne peuvent pas être répétées, c'est-à-dire que deux clés du même objet Map renverront toujours false par rapport à la méthode égale.
Il existe une méthode keySet() dans Map, qui est utilisée pour renvoyer un ensemble composé de toutes les clés de la Map.

HashMap, Hashtable :
La différence entre HashMap et Hashtable :
1 Hashtable est une carte thread-safe, HashMap n'est pas thread-safe, donc HashMap a. de meilleures performances.
2.Hashtable n'autorise pas l'utilisation de null comme clé et valeur, et HashMap autorise l'utilisation de null comme clé ou valeur.

Le critère pour juger de l'égalité de deux clés dans Hashtable et HashMap est le suivant : la méthode equals() des deux clés renvoie true, et les valeurs HashCode des deux clés sont les mêmes que le critère pour ; juger de l'égalité de deux valeurs est que la méthode equals() de la valeur ) renvoie la même valeur.

LinkedMap :
LinkedMap se souviendra de l'ordre dans lequel la valeur-clé est ajoutée.

TreeMap :
TreeMap utilise également une structure arborescente rouge-noir. La norme pour juger de l'égalité de deux clés dans TreeMap est :
Deux clés passent le compareTo(). méthode La valeur de retour est 0. (Sous tri naturel)
La valeur de retour des deux clés via la méthode compareTo() est 0. En même temps, la méthode equals() renvoie true. (Sous tri personnalisé).

EnumMap :
EnumMap est enregistré en interne sous la forme d'un tableau.
EnumMap n'autorise pas null comme clé, mais permet à la valeur d'être nulle.

Analyse des performances de la carte :
Les performances de HashMap sont meilleures que celles de Hashtable.
Les paires clé-valeur dans TreeMap sont toujours dans un état ordonné et aucune opération de tri spéciale n'est requise.
Pour les scénarios d'application généraux, envisagez d'utiliser HashMap.
LinkedMap est plus lent que HashMap car il doit maintenir une liste chaînée pour maintenir l'ordre d'ajout de clé-valeur.
EnumMap a les meilleures performances, mais il ne peut utiliser que les valeurs d'énumération de la même classe d'énumération comme clés.

Recommandations associées :

Méthodes de parcours de la collection Java Set, List, Map

Un morceau de code pour comprendre Utilisation Java de la liste, de l'ensemble et de la carte

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Mar 17, 2025 pm 05:43 PM

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Mar 17, 2025 pm 05:46 PM

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

Mar 17, 2025 pm 05:45 PM

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

See all articles