Maison  >  Article  >  Java  >  Notes d'étude sur le cadre de collecte Java

Notes d'étude sur le cadre de collecte Java

PHPz
PHPzoriginal
2017-04-04 10:36:581640parcourir

La classe de collection Java peut être utilisée pour stocker plusieurs objets de nombres variables et peut implémenter des structures de données communes telles que des piles, des files d'attente, etc. Contrairement aux tableaux, la longueur des tableaux est immuable. Les éléments du tableau peuvent stocker des types de base et des types d'objets, tandis que les collections ne peuvent stocker que des objets (essentiellement des références d'objetsvariables), les ensembles Java peuvent être approximativement. divisé en Set, List et Map, où Set représente un ensemble non ordonné et non répétable, et List représente un ensemble ordonné et répétable, Map représente. une collection avec une relation de mappage, la clé est unique dans la carte et la valeur est répétable. Parmi eux, Set, List et la file d'attente nouvellement ajoutées après java5 sont des sous-interfaces dérivées de CollectionInterface

Les collections Set ne sont pas autorisées à contenir les mêmes éléments, et il n'y a aucune évidence ordre entre les objets de la collection

HashSet, LinkedHashSet et TreeSet sont les principales classes d'implémentation de Set

HashSet ne peut pas garantir l'ordre des éléments, HashSet n'est pas synchronisé et les éléments de l'ensemble HashSet sont autorisés être null, lorsqu'un objet est stocké dans un HashSet, le HashSet appellera la méthode hashCode de l'objet pour obtenir la valeur hashCode de l'objet et déterminera l'emplacement de stockage de l'objet dans le HashSet en fonction sur la valeur hashCode. Dans HashSet, on juge si deux objets sont égaux en comparant les valeurs de retour des méthodes equals() et hashCode()
LinkedHashSet est une sous-classe de HashSet, mais il utilise également une liste chaînée pour maintenir le. ordre des éléments, de sorte que Les éléments semblent être enregistrés dans l'ordre d'insertion. Parce qu'il doit conserver l'ordre d'insertion des éléments, les performances sont légèrement inférieures à celles de HashSet puisqu'il s'agit toujours d'un HashSet, le même élément. ne peut pas être répété

TreeSet

TreeSet est la classe d'implémentation de l'interface SortedSet. De même, TreeSet peut garantir que les éléments de la collection sont dans l'état trié que TreeSet appellera. la méthode comparTo (Object obj) des éléments de la collection pour comparer la relation de taille entre les éléments, puis définir la collection Les éléments sont classés par ordre croissant, c'est-à-dire un tri naturel. TreeSet peut également implémenter un tri personnalisé via l'interface Comparator. Lors de la création d'un objet de collection TreeSet, un objet Comparator est fourni pour être associé à la collection TreeSet, et l'objet Comparator est responsable de la logique de tri des éléments de la collection.

Comparaison des performances de divers ensembles

Les performances de HashSet sont toujours meilleures que celles de TreeSet, car TreeSet nécessite des algorithmes supplémentaires pour maintenir l'ordre des éléments de l'ensemble. TreeSet ne doit être utilisé que lorsqu'un ensemble doit le faire. être conservé trié. Sinon, HashSet doit être utilisé. De plus, LinkedHashSet est une sous-classe de HashSet, correspondant aux opérations ordinaires d'insertion et de

suppression. Les performances de LinkedHashSet sont légèrement plus lentes que celles de HashSet. Cela est dû à la surcharge causée par la maintenance de la liste chaînée. en raison de la liste chaînée, ce sera plus rapide lors de la traversée de LinkedHashSet. Cependant, aucune des trois classes d'implémentation de set n'est threadsafe. Vous pouvez généralement utiliser la méthode synchronizedSortedSet de la classe d'outils Collections pour envelopper la collection set. effectué au moment de la création Par exemple : SortedSet s = Collections.synchronizedSortedSet(<a href="http://www.php.cn/wiki/165.html" target="_blank">new<br>TreeSet(.. .));</a>SortedSet  s = Collections.synchronizedSortedSet(<a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> TreeSet(...));La collection

List représente une collection ordonnée et répétable. Les éléments de la collection ont leurs index correspondants

ArrayList et Vector sont des listes. Il existe deux types typiques. implémentations de LinkedList

où les classes ArrayList et Vector encapsulent un tableau Object[] dynamique qui permet la réallocation, lorsque le nombre d'éléments est ajouté. Lorsque la longueur du tableau est dépassée, la valeur initiale la longueur est automatiquement augmentée. La différence significative entre ArrayList et Vector est qu'ArrayList n'est pas thread-safe, tandis que Vector est thread-safe et ne nécessite pas de programme pour assurer la synchronisation de la collection. Étant donné que Vector est thread-safe, les performances des couleurs de Vector sont inférieures à celles de ArrayList. Même si la sécurité des threads doit être assurée, il n'est généralement pas recommandé d'utiliser Vector. Utilisez plutôt les méthodes appropriées de la classe d'outils Collections pour envelopper ArrayList dans une classe thread-safe.
Vector a également une sous-classe appelée Stack, qui est utilisée pour simuler la structure de données d'une pile Dernier entré, premier sorti Puisqu'il s'agit d'une relation héritage , Stack est également thread-safe, donc. ses performances sont relativement médiocres. Il est recommandé d'utiliser une structure de données telle qu'une pile, vous pouvez envisager d'utiliser LinkedList.
LinkedList est également une classe d'implémentation de List. Implémentation de la liste. Il est optimisé pour l'accès séquentiel aux éléments de la collection, en particulier l'insertion. Il est très rapide de supprimer des éléments. LinkedList implémente à la fois l'interface List et l'interface Deque. empiler. La collection Queue est utilisée pour simuler la structure de données d'une file d'attente, premier entré, dernier sorti Deque est une sous-interface de Queue, représentant une file d'attente à double extrémité, permettant de manipuler les éléments de la file d'attente des deux côtés.

La différence entre LinkedList et ArrayList

Étant donné qu'ArrayList stocke les éléments de la collection en interne sous la forme d'un tableau, il a de meilleures performances lors de l'accès aléatoire aux éléments de la collection, tandis que LinkedList est sous la forme d'une liste chaînée. Il est utilisé pour sauvegarder les éléments de la collection, donc les performances d'accès aléatoire sont médiocres, mais les performances sont très bonnes lors de l'insertion et de la suppression d'éléments.

La carte est utilisée pour enregistrer des données avec des relations de mappage. La clé et la valeur peuvent être n'importe quel type de données de référence, mais la valeur clé de la carte est unique et ne peut pas être répétée.

HashMap et Hashtable le sont. Maps Deux classes d'implémentation

Hashtable est une classe d'implémentation de Map thread-safe, mais HashMap n'est pas thread-safe, donc les performances de HashMap sont légèrement meilleures.
De plus, Hashtable n'autorise pas l'utilisation de null comme clé et valeur. Essayer de mettre null dans Hashtable provoquera une exception de pointeur null, mais HashMap peut utiliser null comme clé et valeur. Puisque les clés ne peuvent pas être répétées, HashMap peut le faire. n'avoir qu'une seule clé nulle. Mais il peut y avoir plusieurs valeurs nulles.
Le critère pour juger de l'égalité de deux clés dans HashMap et Hashtable est que les valeurs de retour​​des deux clés via les méthodes equals() et hashCode() sont égales.
LinkedHashMap est une sous-classe de HashMap. LinkedHashMap utilise également une liste doublement chaînée pour maintenir l'ordre des clés, c'est-à-dire que l'ordre d'itération est cohérent avec l'ordre d'insertion. Étant donné que l'ordre d'insertion des éléments doit être conservé, les performances globales sont légèrement inférieures à celles de HashMap.

TreeMap

Il existe également une interface SortedMap sous Map. L'interface SortedMap est une autre classe d'implémentation TreeMap lorsque TreeMap enregistre les paires clé-valeur, les nœuds doivent être triés en fonction du tri TreeMap. est divisé en tri naturel.Et tri personnalisé.Dans le tri naturel,la clé doit implémenter l'interface Comparable,un objet Comparator doit être transmis lors de la création d'un TreeMap, et cet objet triera les clés dans le TreeMap. Similaire à TreeSet. TreeMap est plus lent que HashMap et Hashtable car il doit maintenir l'ordre.

La différence entre Collection et Collections

Collection est une interface du framework Java de collectionframework
Collections est une classe d'outils dans le framework de collection, qui fournit un grand nombre De méthodes sont utilisées pour trier les éléments de la collection, requête , modifier et autres opérations. Il fournit également des méthodes pour définir les objets de collection pour qu'ils soient immuables et réaliser un contrôle de synchronisation des collections d'objets.

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