Les collections Java sont des boîtes à outils fournies par Java, qui contiennent des structures de données couramment utilisées: collections, listes liées, files d'attente, piles, tableaux, cartes, etc. L'emplacement de la boîte à outils Java Collection est Java.util. *
Les collections Java peuvent être divisées en 4 parties: liste de liste, collection de décors, carte de carte, classes d'outils (itérateur itérateur, classe d'énumération d'énumération, tableaux et collections).
Le cadre de la boîte à outils Java Collection est illustré ci-dessous.
Remarque: En regardant le diagramme du cadre ci-dessus, saisissez d'abord son coffre, à savoir la collection et la carte.
La collection est une interface, une collection hautement abstraite, qui contient les opérations et les propriétés de base de la collection.
La collection comprend deux branches: liste et ensemble.
(01) La liste est une file d'attente commandée et chaque élément a son index. La valeur d'index du premier élément est 0.
Les classes d'implémentation de liste incluent LinkedList, ArrayList, Vector, Stack.
(02) SET est une collection qui n'autorise pas les éléments en double.
Les classes de mise en œuvre de la définition incluent Hastset et Treeset. HashSet s'appuie sur HashMap, qui est en fait implémenté via HashMap; Treeset repose sur Treemap, qui est en fait implémenté via Treemap.
La carte est une interface de mappage, à savoir les paires de valeurs de clé de clé de clé. Chaque élément de la carte contient "une clé" et "une valeur correspondant à la clé".
AbstractMap est une classe abstraite qui implémente la plupart des API dans l'interface MAP. Hashmap, Treemap et WaiwhashMap sont tous hérités de AbstractMap.
Bien que le hachage hérite du dictionnaire, il met en œuvre l'interface MAP.
Ensuite, regardons Iterator. Il s'agit d'un outil pour traverser les collections, c'est-à-dire que nous traversons généralement les collections via Iterator Iterator. Nous disons que la collection dépend de l'Iterator car les classes d'implémentation de la collection doivent implémenter la fonction Iterator () et renvoyer un objet Iterator.
ListeTiterator existe spécifiquement pour la liste de traversée.
Regardons à nouveau l'énumération, c'est une classe abstraite introduite par JDK 1.0. Comme Iterator, il traverse également une collection; Mais l'énumération a moins de fonctions que l'itérateur. Dans le diagramme de bloc ci-dessus, l'énumération ne peut être utilisée que dans le hachage, le vecteur, la pile.
Enfin, regardez les tableaux et les collections. Ce sont deux classes d'outils qui utilisent des tableaux et des collections.
Avec le cadre global ci-dessus, nous analyserons chaque classe séparément.
Architecture de collection
Ci-dessous, nous allons résumer la collection. Jetons un coup d'œil aux diagrammes relationnels de certains cours de cadre dans la collection:
La collection est une interface, et ses deux branches principales sont: Liste et définition.
La liste et le jeu sont des interfaces, et ils héritent de la collection. La liste est une file d'attente commandée, et il peut y avoir des éléments répétés dans la liste; Bien que Set est une collection dans les concepts mathématiques, et il n'y a pas d'éléments répétés dans le plateau!
Liste et set ont leurs propres classes d'implémentation.
Pour une mise en œuvre facile, la classe AbstractCollection Résumé est définie dans la collection, qui met en œuvre la plupart des fonctions dans la collection; De cette façon, dans la classe d'implémentation de la collection, nous pouvons enregistrer le codage en double en héritant de l'abstractCollection. AbstractList et AbstractSet héritent tous deux d'AbstractCollection, la classe d'implémentation de liste spécifique hérite d'AbstractList, et la classe d'implémentation SET hérite d'AbstractSet.
De plus, il existe une fonction iterator () dans la collection, qui est utilisée pour renvoyer une interface itérateur. Habituellement, nous traversons la collection via l'itérateur itérateur. ListIterator est unique à l'interface de liste. Dans l'interface de liste, un objet ListIterator est renvoyé via ListIterator ().
Ensuite, jetons un coup d'œil à l'introduction de chaque interface et classe abstraite; Ensuite, nous aurons une compréhension détaillée de la classe de mise en œuvre.
1. Introduction à la collection
La définition de la collection est la suivante:
La collection d'interface publique <E> étend ITable <e> {} Il s'agit d'une interface, une collection hautement abstraite, qui contient les opérations de base de la collection: ajouter, supprimer, nettoyer, traverser (lecture), qu'il soit vide, d'obtenir la taille, qu'il soit protégé par un certain élément, etc.
Toutes les sous-classes de l'interface de collecte (sous-classe directe et sous-classe indirecte) doivent implémenter deux constructeurs: Constructeurs sans paramètres et constructeurs avec collection de paramètres. Un constructeur avec des paramètres peut être utilisé pour convertir le type de collection.
// Collection apiaBstract booléen add (objet e objet) abstrait booléen addall (collection <? Étend e> collection) abstract void clear () abstrait booléen contient (objet objet) abstrait booléen contientall (collection <?> Collection) abstrait booléen égaux (objet objet) abstract int hashcode () abstract boolean isEmpTy () abstract iterator <e> iterateur (Abstract Boolean isempty () Abstract Iterator <e> Object) Résumé Boolean Removeall (Collection <?> Collection) Abstract Boolean Retainall (Collection <?> Collection) Résumé Int Size () Abstract <T> T [] TOARRAY (T [] Array) Objet abstrait [] ToArray ()
2. Introduction à la liste
La définition de la liste est la suivante:
Liste d'interface publique <E> étend la collection <e> {} La liste est une interface héritée de la collection, c'est-à-dire que la liste est un type de collection. La liste est une file d'attente commandée, et chaque élément de la liste a un index; La valeur d'index du premier élément est 0 et la valeur d'index des éléments suivants +1 à leur tour. Contrairement à l'ensemble, les éléments en double sont autorisés dans la liste. L'introduction officielle de la liste est la suivante:
Une liste est une collection qui maintient une commande pour ses éléments. Chaque élément de la liste a un index. Chaque élément est ainsi accessible par son index, le premier index étant nul. Normalement, les listes permettent des éléments en double, par rapport aux ensembles, où les éléments doivent être uniques.
À propos de l'API. Étant donné que la liste hérite de l'interface de collection, il contient naturellement toutes les interfaces fonctionnelles de la collection; Étant donné que la liste est une file d'attente commandée, il a également sa propre interface API. Les principaux incluent "Ajouter, supprimer, obtenir et modifier des éléments à l'emplacement spécifié", "Obtenez des sous-questions dans la liste", etc.
// Collection apiaBstract booléen add (objet e objet) abstrait booléen addall (collection <? Étend e> collection) abstract void clear () abstrait booléen contient (objet objet) abstrait booléen contientall (collection <?> Collection) abstrait booléen égaux (objet objet) abstract int hashcode () abstract boolean isEmpTy () abstract iterator <e> iterateur (Abstract Boolean isempty () Abstract Iterator <e> Object) Abstract Boolean Removeall (Collection <?> Collection) Résumé Boolean Retainall (Collection <?> Collection) Résumé Int Size () Abstract <T> T [] TOARRAY (T [] Array) Objet abstrait [] TOARRAY () // Comparé à la collection, la nouvelle API de List: Abstract Void Add (int location, E objet) Abstract Boolean Addall (Location INTROCK, COLLECTION <? Emplacement) Résumé Int Indexof (objet Object) Résumé Int LastIndexof (Objet Object) Abstract ListIterator <E> ListIterator (int Location) Abstract ListIterator <E> ListIterator () Résumé E Suppor (int localisation) Résumé E Set (INT Location, E objet) Liste abstraite <E> SUBLIST (INT START, INT END)
3. Introduction à Set
L'ensemble est défini comme suit:
L'ensemble d'interface publique <E> étend la collection <e> {} Set est une interface héritée de la collection, c'est-à-dire que Set est également un type de collection. Set est une collection sans éléments en double.
À propos de l'API. L'API de Set est exactement la même que la collection.
// APIABSTRACT BOOLEAN ADD (E Objet) AddAlt booléen Addall (Collection <? Étend E> Collection) Résumé void Clear () Résumé Boolean Contient (Object Object Object) Abstract Inthcode (Collection <?> Collection) Abstract Boolean Equal Object) Résumé Boolean Removeall (Collection <?> Collection) Abstract Boolean Retainall (Collection <?> Collection) Résumé Int Size () Abstract <T> T [] TOARRAY (T [] Array) Objet abstrait [] ToArray ()
4. AbstractCollection
La définition de l'abstractCollection est la suivante:
classe abstraite de la classe AbstractCollection <E> implémente la collection <e> {} AbstractCollection est une classe abstraite qui implémente les fonctions dans la collection sauf iterator () et size ().
La fonction principale de AbstractCollection: il implémente la plupart des fonctions dans l'interface de collecte. Cela facilite d'autres classes pour implémenter la collection, telles que ArrayList, LinkedList, etc. Si ces classes souhaitent implémenter l'interface de collection, la plupart des interfaces ont été implémentées en héritant de l'abstractCollection.
5. AbstractList
La définition d'AbstractList est la suivante:
classe abstraite du public AbstractList <E> étend AbstractCollection <e> implémente la liste <e> {} AbstractList est une classe abstraite qui hérite de AbstractCollection et implémente l'interface de liste. Il implémente les fonctions dans la liste sauf size () et get (int location).
La fonction principale d'AbstractList: il implémente la plupart des fonctions dans l'interface de liste. Cela facilite d'autres classes pour hériter de la liste.
De plus, par rapport à AbstractCollection, l'interface iterator () est implémentée dans la classe abstraite abstraite.
6. AbstractSet
La définition de l'abstractSet est la suivante: la classe abstraite du public AbstractSet <e> étend AbstractCollection <E> Implémentez Set <e> {} AbstractSet est une classe abstraite qui hérite de AbstractCollection et implémente l'interface définie. Étant donné que l'interface set et l'API dans l'interface de collection sont exactement les mêmes, Set n'a pas sa propre API distincte. Comme AbstractCollection, il implémente les fonctions dans la liste sauf iterator () et size ().
La fonction principale de AbstractSet: il implémente la plupart des fonctions dans l'interface définie. Cela facilite d'autres classes pour implémenter les interfaces SET.
7. Iterator
La définition de l'Iterator est la suivante:
ITERATOR D'INTERFACE PUBLIQUE <E> {} Iterator est une interface, qui est un itérateur de la collection. Une collection peut être traversée à travers les éléments de la collection via Iterator. L'interface API fournie par Iterator comprend: si l'élément suivant existe, obtenir l'élément suivant et supprimer l'élément actuel.
Remarque: Lorsque l'itérateur traverse la collection, il est basé sur le mécanisme de faillite. Autrement dit, lorsqu'un certain thread a traversé un ensemble via un itérateur, si le contenu de l'ensemble est modifié par d'autres threads; Ensuite, lorsque le thread a accède à l'ensemble, une exception concurrenteModificationException sera lancée, ce qui entraînera un événement de faillite. En ce qui concerne le contenu détaillé de l'échec, nous l'expliquerons spécifiquement après le résumé de l'échec.
// iterator's apiaBtrait Boolean Hasnext () Résumé e suivant () Résumé void relève ()
8. ListIterator
La définition de ListIterator est la suivante:
Interface publique ListIterator <E> étend Iterator <E> {} ListeTiterator est une interface héritée d'Iterator, qui est un itérateur de file d'attente. Spécialement utilisé pour une liste pratique, il peut fournir une traversée avant / arrière. Par rapport à Iterator, il ajoute des interfaces API telles que l'ajout, si l'élément précédent existe et l'obtention de l'élément précédent.
// API de ListIterator // Hérité de l'interface d'Iterator abstrait booléen hasnext () abstract e next () abstract void retirait () // add interface abstract void add (e object) abstrait boolean hasprevious () abstract int nextIndex () abstract e précédemment () abstrait intré-intérieur () abstrait voide ensemble (e objet)