Maison  >  Article  >  Java  >  Qu'est-ce qu'une collection ? Introduction de base aux collections Java (avec diagramme-cadre)

Qu'est-ce qu'une collection ? Introduction de base aux collections Java (avec diagramme-cadre)

不言
不言original
2018-09-15 17:35:514172parcourir

Le contenu de cet article porte sur ce qu'est une collection ? Une introduction de base aux collections Java (avec un diagramme de cadre) a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'elle vous sera utile.

Qu'est-ce qu'une collection ?

La classe de collection Java est stockée dans le package java.util et est un conteneur utilisé pour stocker des objets.

Remarque : ① Les collections ne peuvent stocker que des objets. Par exemple, si vous enregistrez des données de type int 1 dans une collection, elles sont automatiquement converties en classe Integer, puis stockées. Chaque type de base en Java a un type de référence correspondant.

 ②. Les collections stockent des références à plusieurs objets, et les objets eux-mêmes sont toujours placés dans la mémoire tas.

 ③. Les collections peuvent stocker différents types de données et un nombre illimité de types de données.

Concepts de base des classes de collection Java

En programmation, il est souvent nécessaire de stocker plusieurs données ensemble. Traditionnellement, les tableaux sont un bon choix pour nous, à condition que nous sachions exactement à l'avance le nombre d'objets que nous allons sauvegarder. Une fois la longueur du tableau spécifiée lors de l'initialisation du tableau, la longueur du tableau est immuable. Si nous devons enregistrer des données qui peuvent croître de manière dynamique (le nombre spécifique ne peut pas être déterminé au moment de la compilation), la classe de collection de Java est une bonne conception.

Les classes de collection sont principalement responsables de la sauvegarde et de la conservation d'autres données, c'est pourquoi les classes de collection sont également appelées classes conteneurs. Toutes les classes de collection se trouvent sous le package java.util. Plus tard, afin de résoudre les problèmes de sécurité de concurrence dans un environnement multithread, java5 a également fourni certaines classes de collection avec une prise en charge multi-thread sous le package java.util.concurrent.

Lors de l'apprentissage de l'API et des principes de programmation de la classe collection en Java, il faut comprendre que « set » est un concept mathématique très ancien, qui précède de longtemps l'émergence de Java. Comprendre les collections du point de vue des concepts mathématiques peut nous aider à mieux comprendre quand utiliser quel type de classe de collection en programmation.

Le but de la bibliothèque de classes conteneur Java est de "sauvegarder les objets" et de les diviser en deux concepts différents :

1) Collection
Un ensemble d'éléments "opposés", généralement ceux-ci les éléments obéissent à certaines règles
1.1) La liste doit maintenir un ordre spécifique des éléments
1.2) L'ensemble ne peut pas avoir d'éléments en double
1.3) La file d'attente maintient l'ordre d'une file d'attente (premier entré, premier sorti)
2 ) Carte
Un ensemble d'objets "paire clé-valeur"

1) La collection ne peut enregistrer qu'un seul élément (objet) à chaque position
2) La carte enregistre "Clé -paires de valeurs", comme une petite base de données. Nous pouvons trouver la "valeur" correspondant à la clé via "clé"

Relation hiérarchique de l'architecture de classe de collection Java

1.Interface Iterable
Interface Iterator, qui est l'interface parent de la classe Collection. Les objets qui implémentent cette interface Itérable permettent la traversée à l'aide de foreach, c'est-à-dire que tous les objets Collection ont une « traversabilité foreach ». Cette interface Iterable n'a qu'une seule méthode : iterator(). Il renvoie un itérateur générique représentant l'objet de collection actuel, qui est utilisé pour les opérations de parcours ultérieures
1.1 Collection
Collection est l'interface de collection la plus basique. Une collection représente un ensemble d'objets appelés éléments. Collection. Collection est une interface qui fournit des définitions standard et ne peut pas être instanciée et utilisée
1) Set
La collection Set est similaire à un pot. Il n'y a pas d'ordre évident parmi les multiples objets "jetés" dans la collection Set. Set hérite de l'interface Collection et ne peut pas contenir d'éléments en double (rappelez-vous qu'il s'agit d'une propriété commune à toute la hiérarchie des classes Set).
Set détermine que deux objets sont identiques au lieu d'utiliser l'opérateur "==", mais en fonction de la méthode égale. En d'autres termes, lorsque nous ajoutons un nouvel élément, si la comparaison égale entre le nouvel objet élément et l'objet existant dans Set renvoie false, alors Set acceptera le nouvel objet élément, sinon il le rejettera.
En raison de cette restriction de Set, lorsque vous utilisez la collection Set, vous devez faire attention à deux points : 1) Implémenter une méthode égale (Object) efficace pour la classe d'implémentation des éléments de la collection Set, 2) Pour le constructeur de Set, le paramètre Collection transmis ne peut pas contenir
ou des éléments répétés
1.1) HashSet
HashSet est une implémentation typique de l'interface Set. HashSet utilise l'algorithme HASH pour stocker des éléments dans la collection, il est donc utilisé. a de bonnes capacités d’accès et de recherche. Lorsqu'un élément est stocké dans la collection HashSet, HashSet appellera la méthode hashCode() de l'objet pour obtenir la valeur hashCode de l'objet, puis déterminera l'emplacement de stockage de l'objet dans le HashSet en fonction de la valeur HashCode.
La principale chose à mentionner est que la norme pour juger de l'égalité de deux éléments dans un ensemble HashSet est que les deux objets sont égaux via la méthode equals() et les valeurs de retour des méthodes hashCode() de les deux objets sont égaux
1.1.1) LinkedHashSet
L'ensemble LinkedHashSet détermine également l'emplacement de stockage des éléments en fonction de la valeur hashCode des éléments, mais contrairement à HashSet, il utilise également une liste chaînée pour maintenir l'ordre des éléments, de sorte que les éléments semblent être enregistrés dans l'ordre d'insertion.
Lors du parcours des éléments de la collection LinkedHashSet, LinkedHashSet accédera aux éléments de la collection dans l'ordre dans lequel les éléments sont ajoutés.
        LinkedHashSet doit conserver l'ordre d'insertion des éléments, les performances sont donc légèrement inférieures à celles de HashSet, mais il aura de bonnes performances lors de l'accès itératif à tous les éléments de l'ensemble (parcours) (les listes liées sont très adaptées au parcours)
 ​ 1.2 ) SortedSet
Cette interface est principalement utilisée pour les opérations de tri, c'est-à-dire que les sous-classes qui implémentent cette interface sont toutes des sous-classes triées
1.2.1) TreeSet
TreeSet est la classe d'implémentation du Interface SortedSet. TreeSet peut garantir que les éléments de la collection sont dans un état trié
1.3) EnumSet
EnumSet est une classe de collection spécialement conçue pour les classes d'énumération. Tous les éléments de EnumSet doivent être des valeurs d'énumération du type d'énumération spécifié. Le type d'énumération est affiché lors de la création de la formule EnumSet, ou implicitement spécifié. Les éléments d'ensemble d'EnumSet sont également ordonnés,
Ils déterminent l'ordre des éléments d'ensemble en fonction de l'ordre de définition des valeurs d'énumération dans la classe Enum
2) List
La collection List représente un ordre et des ensembles d'éléments répétables, chaque élément de l'ensemble a son index séquentiel correspondant. La collection List permet d'ajouter des éléments en double car elle peut accéder à l'élément de collection à la position spécifiée via l'index. Par défaut, la collection List définit l'index des éléments
dans l'ordre dans lequel ils sont ajoutés. 2.1) ArrayList
ArrayList est une classe List implémentée sur la base de tableaux. Elle encapsule un tableau Object[] à croissance dynamique qui permet. redistribution.
2.2) Vector
Vector et ArrayList sont presque identiques dans leur utilisation, mais comme Vector est une ancienne collection, Vector fournit certaines méthodes avec des noms de méthode longs, mais avec JDK 1.2 et versions ultérieures, Java fournit Après avoir compris le cadre de la collection du système, nous allons changer Vector pour implémenter l'interface List et l'intégrer dans le système de framework de collection
2.2.1) Stack
                Stack est une sous-classe fournie par Vector, qui est utilisée pour simuler la structure de données de la « pile » (LIFO dernier entré, premier sorti)
                       2.3) LinkedList, Deque. Implémentez l'interface List et effectuez des opérations de file d'attente dessus, c'est-à-dire que vous pouvez accéder de manière aléatoire aux éléments de la collection en fonction de l'index. En même temps, il implémente également l'interface Deque, c'est-à-dire que LinkedList peut être utilisée comme une file d'attente à double extrémité
   . Naturellement, il peut également être utilisé comme "pile"
3) Queue
La file d'attente est utilisée pour simuler la structure de données d'une "file d'attente" (premier entré, premier sorti FIFO). La tête de la file d'attente contient l'élément avec la durée de stockage la plus longue dans la file d'attente, et la queue de la file d'attente contient l'élément avec la durée de stockage la plus courte dans la file d'attente. Un nouvel élément est inséré (offre) à la fin de la file d'attente
L'opération d'accès à l'élément (poll) renverra l'élément en tête de la file d'attente. La file d'attente ne permet pas un accès aléatoire aux éléments de la file d'attente. Vous aurez une bonne compréhension de ce concept en combinant les files d'attente courantes dans la vie
3.1) PriorityQueue
PriorityQueue n'est pas une implémentation de file d'attente relativement standard. L'ordre dans lequel les éléments de file d'attente sont enregistrés par PriorityQueue n'est pas dans l'ordre. de rejoindre la file d'attente, mais dans l'ordre de la file d'attente. La taille des éléments est réorganisée, ce qui peut également être vu à partir de son nom de classe
3.2) Deque
3.2) L'interface Deque représente une "file d'attente à double extrémité". ", et une file d'attente à double extrémité peut être ajoutée des deux extrémités en même temps, supprimez des éléments, de sorte que la classe d'implémentation de Deque peut être utilisée soit comme une file d'attente, soit comme une pile
3.2.1) ArrayDeque
3.2 .1) ArrayDeque
est une file d'attente à double extrémité basée sur un tableau. Semblable à ArrayList, ils utilisent tous deux un tableau Object[] dynamique et redistribuable pour stocker les éléments de la collection lorsque les éléments de la collection dépassent la capacité du. tableau, le système réattribuera un tableau Object[] au niveau de la couche inférieure pour stocker les éléments de la collection
3.2) LinkedList
1.2 Map
La carte est utilisée pour enregistrer les données avec une "relation de mappage", Ainsi, la collection Map enregistre deux ensembles de valeurs, un ensemble de valeurs est utilisé pour enregistrer la clé dans la carte et l'autre ensemble de valeurs est utilisé pour enregistrer la valeur dans la carte. La clé et la valeur peuvent être n’importe quel type de données de référence. Les clés de carte ne peuvent pas être répétées, c'est-à-dire que le résultat de la comparaison de deux clés du même objet Map via la méthode égale renverra toujours faux.
Concernant Map, nous devons le comprendre du point de vue de la réutilisation du code. Java implémente d'abord Map, puis implémente la collection Set en empaquetant une Map avec toutes les valeurs nulles
Ces classes et sous d'implémentation. -classes de Map La forme de stockage de l'ensemble de clés dans l'interface est exactement la même que la collection Set (c'est-à-dire que la clé ne peut pas être répétée)
La forme de stockage de l'ensemble de valeurs dans ces classes d'implémentation et sous-interfaces de Map est très similaire à celle de List (c'est-à-dire que la valeur peut être répétée et recherchée en fonction de l'index)
1) HashMap
Tout comme la collection HashSet ne peut garantir l'ordre des éléments, HashMap ne peut pas garantir l'ordre des paires clé-valeur. Et similaire à HashSet, la norme pour juger si deux clés sont égales est la suivante : deux clés sont comparées via la méthode equals() et renvoient true,
En même temps, les valeurs hashCode des deux clés doivent également être égal
1.1) LinkedHashMap
LinkedHashMap également Utilisez une liste doublement chaînée pour maintenir l'ordre des paires clé-valeur. La liste chaînée est responsable du maintien de l'ordre d'itération de la carte, qui est cohérent avec l'ordre d'insertion de la clé. -Paires de valeurs (notez qu'il est différent de TreeMap dans le tri de toutes les paires clé-valeur)
2) Hashtable
est une ancienne classe d'implémentation de Map
2.1) Propriétés
L'objet Properties est particulièrement pratique lorsque traitement des fichiers de propriétés (fichiers .ini sur les plateformes Windows). La classe Properties peut combiner des objets Map avec Les fichiers d'attributs sont associés, de sorte que les paires clé-valeur de l'objet Map puissent être écrites dans le fichier d'attributs
, ou dans le "nom d'attribut-valeur d'attribut" dans le fichier d'attribut peut être chargé dans l'objet Map
3 ) SortedMap
Tout comme l'interface Set dérive une sous-interface SortedSet et que l'interface SortedSet a une classe d'implémentation TreeSet, le L'interface Map dérive également une sous-interface SortedMap, et l'interface SortedMap a également une classe d'implémentation TreeMap
3.1) TreeMap
TreeMap Il s'agit d'une structure de données arborescente rouge-noir, et chaque paire clé-valeur sert de nœud de l'arbre rouge-noir. Lorsque TreeMap stocke des paires clé-valeur (nœuds), les nœuds doivent être triés en fonction de la clé. TreeMap peut garantir que toutes les paires clé-valeur
sont dans un état ordonné. De même, TreeMap dispose également de deux méthodes de tri : le tri naturel et le tri personnalisé
4) WeakHashMap
L'utilisation de WeakHashMap et HashMap est fondamentalement similaire. La différence est que la clé HashMap conserve une « référence forte » à l'objet réel, ce qui signifie que tant que l'objet HashMap n'est pas détruit, l'objet référencé par HashMap ne sera pas récupéré.
Mais la clé de WeakHashMap ne conserve qu'une référence faible à l'objet réel, ce qui signifie que si les objets référencés par les clés de l'objet WeakHashMap ne sont pas référencés par d'autres variables de référence fortes, les objets référencés par ces clés peuvent être des ordures collecté. Lorsque l'objet réel correspondant à la clé est récupéré, WeakHashMap peut également supprimer automatiquement les paires clé-valeur correspondant à ces clés
5) IdentityHashMap
Le mécanisme de mise en œuvre d'IdentityHashMap est fondamentalement similaire à HashMap. , IdentityHashMap considère deux clés égales si et seulement si les deux clés sont strictement égales (key1 == key2)
6) EnumMap
EnumMap est une implémentation Map utilisée avec les classes d'énumération. d'une seule classe de dénombrement. Lors de la création d'un EnumMap, sa classe d'énumération correspondante doit être spécifiée explicitement ou implicitement. EnumMap est basé sur l'ordre naturel des clés
 (c'est-à-dire l'ordre dans lequel les valeurs d'énumération sont définies dans la classe d'énumération)

Diagramme du cadre de collection Java

Quest-ce quune collection ? Introduction de base aux collections Java (avec diagramme-cadre)

Recommandations associées :


Introduction à l'architecture Java Collection Framework

Java Introduction détaillée au cadre de collecte des points techniques de base

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