L'interface java.util.Set est la même que l'interface java.util.List. Elle hérite également de l'interface Collection. Elle est fondamentalement la même que les méthodes de l'interface Collection. Elle n'étend pas fonctionnellement la collection. interface, mais est plus avancée que l'interface Collection Strict. Contrairement à l'interface List, les éléments de l'interface Set ne sont pas ordonnés et certaines règles sont utilisées pour garantir que les éléments stockés ne sont pas répétés.
La collection Set comporte de nombreuses sous-classes, nous en présentons ici deux : java.util.HashSet et java.util.LinkedHashSet rassemblent.
Caractéristiques : Il y aura certaines règles pour garantir que les éléments stockés ne sont pas répétés. Les éléments de l'interface Set ne sont pas ordonnés
①Les éléments ne sont pas répétés
②éléments non ordonnés (faisant référence à un accès non ordonné)Table de hachage : tant qu'un objet personnalisé est stocké dans la table de hachage, la classe à laquelle appartient l'objet personnalisé doit remplacer la méthode hashCode&equals⑴Collection HashSet
La couche inférieure est le nouvel objet HashMap sous-jacent implémenté via HashMap Seule la clé est utilisée et la valeur n'est pas utilisée pour pointer vers l'adresse unifiée new Object()<.>Introduction à l'API :java.util.HashSet est une classe d'implémentation de l'interface Set. Les éléments qu'elle stocke ne sont pas répétables et les éléments ne sont pas ordonnés (c'est-à-dire que les éléments qu'elle stocke ne sont pas répétables). c'est-à-dire que l'ordre d'accès est incohérent). L'implémentation sous-jacente de java.util.HashSet est en fait un support java.util.HashMap qui détermine l'emplacement de stockage des éléments de la collection en fonction de la valeur de hachage de l'objet, ce qui lui confère de bonnes performances d'accès et de recherche. La manière de garantir l’unicité des éléments repose sur : les méthodes hashCode et equals.
Caractéristiques :①Aucun élément répété
②Ordre d'accès incohérent
③Bonnes performances d'accès et de recherche
④Le La façon dont l'unicité de l'élément dépend de : la méthode hashCode et égal à
La structure (table de hachage) de la collection HashSet pour stocker les données :dans JDK1 Avant .8, le la couche inférieure de la table de hachage a été implémentée à l'aide d'un tableau + liste chaînée Même si une liste chaînée était utilisée pour gérer les conflits,
les listes chaînées avec la même valeur de hachage étaient toutes stockées dans une liste chaînée. Cependant, lorsqu'il y a de nombreux éléments dans un compartiment,
, c'est-à-dire lorsqu'il y a de nombreux éléments avec des valeurs de hachage égales, l'efficacité de la recherche séquentielle par valeur de clé est faible.
Dans JDK1.8, le stockage de la table de hachage est implémenté par tableau + liste chaînée + arbre rouge-noir
Lorsque la longueur de la liste chaînée dépasse le seuil (8), la liste chaînée. est converti en un arbre rouge-noir, ce qui réduit considérablement le temps de recherche.
En bref, l'introduction des arbres rouge-noir dans JDK1.8 a grandement optimisé les performances de HashMap
Donc, pour nous, garantir le caractère unique des éléments de la collection HashSet est en fait basé sur le.
de l'objet Décidé par les méthodes hashCode et égal. Si nous stockons un objet personnalisé dans la collection,
alors pour garantir son unicité, nous devons remplacer les méthodes hashCode et égal à pour établir une méthode de comparaison appartenant à l'objet actuel.
Résumé : Avant la version 1.8, il était implémenté via la couche inférieure de la table de hachage à l'aide d'un tableau + liste chaînée
Dans la version 1.8, il était implémenté via le stockage de la table de hachage à l'aide d'un tableau + liste chaînée + rouge -arbre noir (la longueur de la liste chaînée dépasse le seuil (8), convertir la liste chaînée en un arbre rouge-noir, ce qui réduit considérablement le temps de recherche) Pour garantir que les éléments sont uniques, les méthodes hashCode et égal à réécrit pour établir une méthode de comparaison appartenant à l'objet actuel
HashSet stocke les éléments de type personnalisé (Points clés) :
Lors du stockage des éléments de type personnalisé dans HashSet, vous devez réécrire les méthodes hashCode et égal à dans l'objet.
Établissez votre propre méthode de comparaison pour vous assurer que les objets de la collection HashSet sont uniques
⑵LinkedHashSetHashSet garantit que les éléments sont uniques, mais les éléments sont stockés dans aucun ordre, nous devons donc garantir l'ordre. Que devons-nous faire ? Il y en a un sous la sous-classe HashSet java.util.LinkedHashSet, qui est une structure de stockage de données qui est une combinaison de liste chaînée et de liste chaînée. table de hachage.
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!