Es wird viele Objekte in der tatsächlichen Projektentwicklung geben. Java bietet einen Sammelgerüst, um solche Probleme zu lösen Die Klassen befinden sich im Java.util -Paket und List 1 beschreibt die Beziehung zwischen der Sammlungsklasse.
Auflistung 1. Die Beziehung zwischen der Sammlungsklasse
Sammlung
├Liste
│├ LinkedList
│laarrayList
│orvector
│ Kstack
└Set
Karte
Bhashtable
Phashmap
SweakhashMap
Sammlungsschnittstelle
Sammlungsschnittstelle
Die Sammlung ist die grundlegendste Sammelschnittstelle. Einige Sammlungen erlauben die gleichen Elemente und unterstützen die Sortierelemente, während andere nicht arbeiten. JDK liefert keine Klassen, die direkt aus der Sammlung geerbt wurden. Alle Klassen, die die Sammelschnittstelle implementieren, müssen zwei Standardkonstruktoren ohne Parameter zur Verfügung stellen, um eine leere Sammlung zu erstellen. Mit dem letzteren Konstruktor können Benutzer eine Sammlung kopieren.
Wie kann man jedes Element in der Sammlung durchführen?
Unabhängig von der tatsächlichen Sammlung unterstützt sie eine Iterator () -Methode. Die typische Verwendung ist wie folgt:
Iterator it = collection.iterator ();
Die beiden Schnittstellen der Sammlungsschnittstelle sind Liste und festgelegt.
Die Hauptmethode der Sammlungsschnittstelle:
1. boolean add (Objekt o) Objekt zur Sammlung hinzufügen;
2. boolean entfernen (Objekt O) Löschen Sie das angegebene Objekt;
3. Int Size () gibt die Anzahl der Elemente in der aktuellen Sammlung zurück;
V.
5. boolean isEmpty () Bestimmen Sie, ob der Satz leer ist;
6. Iterator Iterator () geben einen Iterator zurück;
7. Boolean enthält alle (Sammlung C) Finden Sie fest, ob im Satz Elemente im Satz C enthalten sind.
8. Boolean Addall (Sammlung C) fügt der Sammlung alle Elemente in der Sammlung C hinzu;
9. void clear () löschen Sie alle Elemente im Satz;
10. void removealll (Sammlung C) Löschen Sie die Elemente im Satz c -collection aus der Sammlung;
11. void retainall (Sammlung C) Löschen Sie das Element, das nicht in die Sammlung C aus der Sammlung enthält.
Listenschnittstelle
List ist eine ordnungsgemäße Sammlung, die die Position jedes Elementeinfügung mit dieser Schnittstelle genau steuern kann. Benutzer können Indizes (die Position der Elemente in der Liste, ähnlich wie beim Array -Gebot) verwenden, um auf die Elemente in der Liste zuzugreifen, die dem Java -Array ähnlich sind. Im Gegensatz zu dem nachstehend erwähnten Satz erlaubt die Liste dieselben Elemente.
Zusätzlich zur Iterator () -Methode, die für die Sammlungsschnittstelle erforderlich ist, bietet die Liste auch eine ListIterator () -Methode zur Rückgabe einer Listotriator -Schnittstelle. Im Vergleich zur Standard -Iterator -Schnittstelle verfügt Listotriator über einige Methoden wie add (), die Funktionen wie Hinzufügen, Löschen, Einstellen von Elementen, Vorwärts- oder Rückwärtstraversal ermöglichen. Zu den häufig verwendeten Klassen zum Implementieren von Listenschnittstellen gehören LinkedList, ArrayList, Vector und Stack.
Die Hauptmethode, die durch die Listenschnittstelle bereitgestellt wird:
1. void Add (int Index, Objektelement) fügt ein Objekt an der angegebenen Stelle hinzu.
2. Boolean Addall (int -Praktikanten, Sammlung c) fügt das Element des Satzes C zur angegebenen Position hinzu;
3. Objekt Get (int Index) gibt das in der angegebene Position in der Liste angegebene Element zurück.
4. Indexof (Objekt O) gibt die Position des ersten Elements O zurück;
5. Object RemoveInt (int Index) Löschen Sie das Element der angegebenen Position;
6. Objektset (int Indexex, Objektelement) Ersetzen Sie die Elemente im Positionsindex des Elementelements, um das austauschbare Element zurückzugeben.
Kartenschnittstelle
MAP erbte die Colleg -Schnittstelle nicht. Die Karte bietet eine Zuordnung von Schlüssel zu Wert. Die Kartenschnittstelle bietet 3 Sätze von Ansichten.
Die von MAP bereitgestellte Hauptmethode:
1. Boolean Equals (Objekt O) Vergleichsobjekt;
2. boolean entfernen (Objekt O) Löschen Sie ein Objekt;
3. Put (Objektschlüssel, Objektwert) Fügen Sie Schlüssel und Wert hinzu.
Zufällige Schnittstelle
Die RandomAccess -Schnittstelle ist eine Logo -Schnittstelle, die selbst keine Methode bereitstellt. Der Hauptzweck dieser Schnittstelle besteht darin, die Listenimplementierung zu identifizieren, die den schnellen und zufälligen Zugriff unterstützen kann. Jede Array-basierte Listenimplementierung implementiert die Raodomaccess-Schnittstelle, während verknüpfte listenbasierte Implementierungen dies nicht tun. Da nur das Array einen schnellen Zufallszugriff ausführen kann, muss der Zufallszugriff auf die verknüpfte Liste durch die verknüpfte Liste durchquert werden. Der Vorteil dieser Schnittstelle besteht daher darin, dass Sie in der Anwendung wissen, ob das verarbeitete Listenobjekt einen schnellen und zufälligen Zugriff ausführen kann, um unterschiedliche Vorgänge für eine andere Liste auszuführen, um die Leistung des Programms zu verbessern.
Einführung
LinkedList -Klasse
LinkedList implementiert die Listenschnittstelle und ermöglicht Nullelemente. Darüber hinaus bietet LinkedList zusätzliche GET-, Entfernen-, Einfügungs- und andere Methoden zum Betrieb von Daten am ersten oder am Ende der LinkedList. Diese Operationen erstellen eine LinkedList können als Stapel, Warteschlangen (Warteschlangen) oder zwei Way -Warteschlangen verwendet werden. Bitte beachten Sie, dass LinkedList keine Synchronisationsmethode hat. Eine Lösung besteht darin, beim Erstellen einer Liste eine synchrone Liste zu erstellen.
Listlist = collections.synchronizedList (New LinkedList (…));
ArrayList -Klasse
ArrayList implementiert ein Array der Variablengröße. Es ermöglicht allen Elementen, einschließlich Null. Größe, Isempty, GET, SET und andere Methoden sind die Laufzeit, aber der Überkopf der ADD -Methode ist die Konstante der Freigabe.
Jede ArrayList -Instanz hat eine Kapazität (Kapazität), um die Größe der Speicherelemente zu speichern. Wenn eine große Menge an Elementen eingefügt werden muss, können Sie die Sicherungs -Methode aufrufen, bevor Sie die Kapazität der ArrayList erhöhen, um die Einfügungseffizienz zu verbessern. Wie LinkedList ist ArrayList ebenfalls ein Thread -not -synchronisierter (unsynchronisiert).
Die von ArrayList bereitgestellte Hauptmethode:
1. Boolean Add (Objekt O) fügt das angegebene Element zum Ende der Liste hinzu.
2. boolean add (int indexex, Objektelement), um die Position zum Hinzufügen des angegebenen Elements in der Liste anzugeben.
3.. Boolean Addall (Sammlung C) fügt den angegebenen Satz zum Ende der Liste hinzu.
V.
5. Boolean Clear () Löschen Sie alle Elemente in der Liste;
6. Boolean Clone () kehren Sie zu einer Kopie der Liste der Liste zurück;
7. Boolean enthält (Objekt O) Bestimmen Sie, ob es Elemente in der Liste enthält.
8. Boolesche Sicherungsträger (int m) erhöht die Kapazität der Liste.
9. Object Get (int Index) Gibt das in der Liste in der Liste angegebene Element zurück;
10. Indexof (Objekt Elem) in der Liste findet das Gebot des angegebenen Elements;
11. int size () gibt die Anzahl der Elemente der aktuellen Liste zurück.
Vektorklasse
Der Vektor ist ArrayList sehr ähnlich. Der Unterschied besteht darin, dass der Vektor durch Threads synchronisiert wird. Der von Vector erstellte Iterator, obwohl der von ArrayList erstellte Iterator der gleiche Port ist, da Vektor synchronisiert ist. Wenn ein Iterator erstellt und verwendet wurde, änderte der andere Thread den Status des Vektors (z. B. Hinzufügen oder Löschen eines Teils einiger von der Staatliche Elemente) Wenn die Iteratormethode aufgerufen wird, wird die ConcurrentModificationException ausgeworfen, sodass die Ausnahme erfasst werden muss.
Stapelklasse
Stack wurde von Vector geerbt und erkannte einen Stapel, der anschließend vorangebracht wurde. Stack bietet 5 zusätzliche Methoden für Vektor, die als Stapel verwendet werden können. Zusätzlich zu den grundlegenden Push- und Pop -Methoden gibt es die Peek -Methode, um das Element der Oberseite des Stapels zu erhalten. Stapel. Beachten Sie, dass es nach dem Erstellen von Stack ein leerer Stapel war.
Klasse festlegen
SET ist eine Sammlung ohne wiederholte Elemente, dh zwei beliebige Elemente E1 und E2 haben E1.Equals (E2) = False. Es gibt höchstens ein Nullelement. Offensichtlich hat der Konstruktor des Satzes eine Einschränkungsbedingung, und die Eingabe der Sammlungsparameter kann keine doppelten Elemente enthalten. Bitte beachten Sie, dass Sie die variablen Objekte sorgfältig bedienen müssen.
Hashtable -Klasse
Hashtable erbt die Kartenschnittstelle und implementiert eine Hash-Tabelle basierend auf der Schlüsselwert-Zuordnung. Jedes Nicht-Null-Objekt kann als Schlüssel oder Wert verwendet werden. Fügen Sie Daten hinzu, um Put (Schlüssel, Wert) zu verwenden, und nehmen Sie die Daten zur Verwendung von GET (Schlüssel) aus.
Hashtable passt die Leistung durch die beiden Parameter der Anfangskapazität und des Lastfaktors an. Der Standardlastfaktor 0,75 erreicht besser Zeit und Raum. Erhöhter Lastfaktor kann Platz sparen, aber die entsprechende Suchzeit erhöht sich, was sich auf die Operationen wie Get and Put auswirkt. Verwenden Sie das einfache Beispiel von Hashtable, um die drei Zahlen von 1, 2 und 3 in den Hashtable zu setzen.
Liste 2. Hashtable -Beispiel
Hashtable numbers = new Hashtable (); numbers.put ("eins", New Integer (1)); Nummern.put ("zwei", New Integer (2)); Nummern.Put ("drei", New Ganzzahl (3) );
Wenn wir eine Nummer wie 2 herausnehmen müssen, können wir den entsprechenden Schlüssel verwenden, um sie herauszunehmen, und der Code ist in Liste 3 angezeigt.
Liste 3. Lesen Sie Daten von Hastable
Ganzzahl n = (Integer) number.get ("zwei");
Da das Objekt des Schlüssels durch Berechnung seiner Verteilungsfunktion bestimmt wird, um die Position des entsprechenden Werts zu bestimmen, muss jedes Objekt als Schlüssel den HashCode- und Equals -Methoden implementieren. Hashcode und Equals -Methoden erben das Stammobjekt. = Wahr, dann muss ihr Hashcode gleich sein, aber wenn die beiden Objekte unterschiedlich sind, ist ihr HashCode nicht unbedingt anders. HashCode () -Methode, mit der der Betrieb von Hash -Tabellen beschleunigt werden kann.
Wenn dasselbe Objekt einen anderen HashCode hat, wird es für den Betrieb der Hash -Tabelle unerwartete Ergebnisse geben (ich freue mich darauf, NULL zurückzugeben). anstatt nur einen von ihnen zu schreiben.
Hashmap -Klasse
HashMap ähnelt Hashtable. Wenn die HashMap jedoch als Sammlung angesehen wird (die VALUTE () -Methode zurückgegeben werden kann), ist sie proportional zum iterativen Unterkopf und der Kapazität von HashMap. Wenn die Leistung des Iterationsbetriebs sehr wichtig ist, setzen Sie die Initialisierungskapazität von HashMap nicht zu hoch oder setzen Sie den Lastfaktorparameter zu niedrig.
WeaChashMap -Klasse
WeepHashMap ist eine verbesserte Hashmap, die "schwache Referenz" für den Schlüssel ist.
Sammlungsklassenpraxis
ArrayList, Vector und LinkedList werden alle aus der AbstractList implementiert, und die AbstractList implementiert direkt die Listenschnittstelle und wird von AbstarctCollection erweitert. ArrayList und Vector verwenden Arrays, um eine Thread -Synchronisation für eine Methode zu implementieren. LinkedList verwendet eine zirkuläre zweiwaye Datenstruktur, die durch eine Reihe von Tabellenelementen verbunden ist.
Wenn die Nachfrage nach ArrayList nach Kapazität die Größe des aktuellen Arrays überschreitet, muss es erweitert werden. Während des Kapazitätserweiterungsprozesses wird eine große Anzahl von Array -Replikationsvorgängen durchgeführt, und wenn das Array repliziert wird, wird das System.ArrayCopy () -Methode schließlich aufgerufen. Da die LinkedList die Struktur der verknüpften Liste verwendet, muss die Größe der Kapazität jedoch nicht beibehalten. Aufgrund der Kontinuität des Arrays kann das Array -Expansion und die Array -Replikation nur dann erzeugt werden, wenn das Element am Ende immer erhöht wird, wenn der Raum nicht ausreicht.
ArrayList basiert auf Array und das Array ist ein kontinuierlicher Speicherplatz. Die LinkedList verringert die Leistung aufgrund des Einsetzens von Daten nicht.
Jedes effektive Element der ArrayList muss nach dem Löschen von Operationen neu organisiert werden, und je höher die Positionierung der gelöschten Elementposition ist, desto größer ist der Overhead während der Umstrukturierung des Arrays. LinkedList muss die Zwischendaten für eine halbe Liste entfernen.
Liste 4. ArrayList und LinkedList verwenden Code
Java.util.ArrayList; = Neues Objekt (); m. (); 0, OBJ2); 1000; i ++) {list1.add (obj1);} end = System.CurrentTtimemillis (); System.currentttimemillis (); ;}}
Liste 5. Ausgabe ausführen
639129669690015
HashMap soll den Schlüsselalgorithmus erstellen und dann den Hash -Wert der Speicheradresse abbilden, um die Daten, die dem Schlüssel entsprechen, direkt zu erhalten. In HashMap verwendet die zugrunde liegende Datenstruktur ein Array. Die sogenannte Speicheradresse ist der Beschriftungsindex des Arrays. Die hohe Leistung von HashMap erfordert die folgenden Punkte:
1. Der Hash -Algorithmus muss effizient sein;
2. Der Algorithmus des Hash -Werts zur Speicheradresse (Array -Index) ist schnell;
3. Nach der Speicheradresse (Array -Index) können Sie den entsprechenden Wert direkt erhalten.
HashMap ist eigentlich eine Reihe einer verknüpften Liste. Wie bereits erwähnt, basiert der Implementierungsmechanismus, der auf der verknüpften Listenmethode basiert, die auf dem HashMap basiert, solange die Methoden HashCode () und Hash () erreicht sind, um das Auftreten von Konflikten so weit wie möglich zu verringern Fast entsprechend dem zufälligen Zugriff auf die Arrays von Arrays hat eine gute Leistung. Wenn die HashCode () oder Hash () -Methode schlecht erreicht ist, wird bei einer großen Anzahl von Konflikten der HashMap tatsächlich in mehrere verknüpfte Listen abgebaut, was der verknüpften Liste für den Betrieb von HashMap entspricht Diesmal ist die Leistung sehr schlecht.
Ein funktionaler Nachteil von HashMap ist seine Störung, die in den Elementen in HashMap gespeichert ist. Wenn Sie die Eingangsreihenfolge beibehalten möchten, können Sie stattdessen LinkedHasMap verwenden.
LinkedHasMap erbt von HashMap und hat gleichzeitig eine hohe Effizienz.
HashMap kann put () und got () so schnell wie der Hash -Algorithmus bedienen. Treemap bietet eine völlig andere Kartenimplementierung. In Bezug auf die Funktion hat Treemap eine leistungsstarke Funktion als HashMap. Die Leistung von Treemap ist etwas niedriger als HashMap. Wenn Sie die Elemente in der Entwicklung sortieren müssen, können Sie diese Funktion nicht mit HashMap implementieren. LinkedHasMap basiert auf der Reihenfolge des Elements, die in die Sammlung oder die sequentielle Reihenfolge des Zugriffs eintreten.
LinkedHasMap wird nach der Reihenfolge der Elementerhöhung oder des Zugriffs sortiert, während Treemap nach dem Schlüssel des Elements sortiert wird.
Listing 6 zeigt, dass der Code die Reihenfolge der Geschäftslogik mithilfe von Treemap demonstriert.
Listing 6. Treemap implementiert Sortierung
Java.util.iterator Java.util.Map; Name; (O.Score> this.score) {return -1;} return 0;} @Overridepublic String toString () {StringBuffer SB = New StringBuffer (); ; SB.Append (""); (); Student S1 = New Student ("1", 100); Student S2 = New Student ("2", 99); Student S3 = New Student ("3", 97); Student S4 = New Student ("4" 4 " ", 91); map.put (S1, neue studentDetailinfo (s1)); map.put (S2, New StudentDetailinfo (S2)); Map.put (S3, New StudentDetailinfo (S3)); S4, New Studentendetailinfo (S4 )); Next (); (S1) für (Iterator iterator = map1.keyset () (Schlüssel));} System.out.println ("Submap End"); ;) {Student Key = (Student) ITRator (Student S) {this.s = s;}@ounridepublic String toString () {return s.name + "s detail -Informationen";}}
Liste 7. Ausgabe ausführen
Name: 4 Punktzahl: 91-> 4 Detail InformationName: 3 Punktzahl: 97-> 3 Detail Informationssubmap Endname: 4 Punktzahl: 91-> 4 Detail InformationName: 3 Punktzahl: 97-> 3 Detailinformation: 2 Punktzahl: 99- 99- > 2 von Detail Informations submap Endname: 1 Punktzahl: 100-> 1 Detail Informations submap End
WeepHashMap ist selbst charakterisiert, dass diese Karte automatisch den Wert verengt, wenn es in diesem Schlüssel, wenn es in diesem Schlüssel außer ihren Zitaten nicht andere gibt, den Wert automatisch verworfen. Wie in Listing 8 gezeigt, zeigt der Code zwei Kartenobjekte, eine HashMap und der andere ist schwach. Null, sie zeigen auf Null. Der Grund für diese Situation ist, dass für das Objekt A, wenn Hashmap gelöscht wird und A bis Null, zusätzlich zu Weakhashmap, es gibt keinen Zeiger auf A, außer A, obwohl es auf Null zeigt, gibt es einen Zeiger, auf das B in Hashmap gerichtet ist, so schwachhashmap behält das B -Objekt.
Liste 8.WeakhashMap Beispielcode
Java.util.HASHMAP; String ("A"); B, b, b, b, b, b, b, b, b, b, b, b, "bbb"); "BBB"); .Entry en = (MAP.Entry) iZext (); Iterator (); +En.getValue ());
Auflistung 9. Ausgabe ausführen
Karte: B: BbbWeakmap: B: BBB
WeaphasMap erreicht hauptsächlich den Zweck, die internen nicht verwendeten Einträge durch leitende Entfernung zu entfernen, wodurch der Zweck der automatischen Freigabe des Speichers erreicht wird. Solange auf den Inhalt von WeepHashMap zugegriffen wird, wird diese Funktion auf diese Funktion aufgerufen, um den nicht mehr verwiesenen internen Eintrag zu erreichen. Aber wenn Sie ein WeaChasMap geworden sind und vor dem GC noch nie die WeaChasMap besucht haben, ist es nicht unbegrenzt, Speicher zu veröffentlichen?
Liste 10. WeaChashMaptest1
Java.util.ArrayList; ] [] >> Maps = Neue ArrayList <WecaSmasMap <Byte [] [], Byte [] [] >> (); Byte [] []> D = NEW WACKHASHMAP <BYTE [] [], BYTE [] []> (); .Add (d);
Ändern Sie keinen JVM -Parameter, der in der Operationsliste ausgeführt wird.
Liste 11. Ausgabe ausführen
241242243Excetion im Thread "Haupt" java.lang.outofMemoryError: Java Heap Spaceat WeepaHashMaptest1.main (WeaChashMapst1.java:10)
Sicher genug, WeepHashMap hat zu diesem Zeitpunkt keinen unnötigen Speicher automatisch freigegeben. Der in Listing 12 angezeigte Code hat keinen Speicherüberlauf.
Liste 12. WeaChashMaptest2
Java.util.ArrayList; ] [] >> Maps = Neue ArrayList <WecaSmasMap <Byte [] [], Byte [] [] >> (); Byte [] []> D = NEW WACKHASHMAP <BYTE [] [], BYTE [] []> (); .Add (d); .Get (j) .SIZE ());}}}}
Die Ergebnisse der Operation ergaben, dass die Testausgabe normal war und das Problem des Speicherüberlaufs nicht mehr auftrat.
Im Allgemeinen ist WeepHashMap kein Objekt, das nicht darin verwendet wird, wenn Sie etwas tun, sondern das interne nicht verwendete Objekt freigeben, wenn Sie darauf zugreifen.
WeepHashMap implementiert schwache Referenzen, da sein Eintritt <k, v> von WeaCreference <k> geerbt wird.
In der Klassendefinition und im Konstruktor des WeaChashMap $ -Tors <k, v> wird es in der Liste 13 angezeigt.
LIST 13. WACKHASHMAP -Klassendefinition
Private statische Klasseneintrag <k, v> erweitert Weepecreference <K> implementiert MAP.Entry <K, v> Eintrag (K -Schlüssel, V -Wert, Referenzqueue <K> Warteschlange, Int Hash, Eintrag <k, V> Weiter) {Super) {Super (Schlüssel, Warteschlange);
Bitte beachten Sie, dass es eine Vaters -Class -Aussage erstellt: "Super (Schlüssel, Warteschlange);"; In System.gc () wird das Byte -Array im Schlüssel recycelt und der Wert verbleibt (Wert ist stark mit dem Eintrag verbunden, der Eintrag ist in der Karte zugeordnet und die Karte ist in ArrayList zugeordnet).
Jedes Mal, wenn ich jedes Mal eine neue schwacheHashmap habe, nach der Put -Operation, obwohl der GC das Byte -Array in WeaceReference -Schlüssel recycelt, und das Ereignis mit Referenzqueue benachrichtigt, gibt es keine entsprechende Wirkung, um Wea Der Schlüssel gibt es immer noch in WeepeHasMap, und sein entsprechender Wert existiert ebenfalls.
Wann wird der Wert gelöscht? ? Überprüfen Sie den Quellcode von WeakHasMap. Daher ist der Effekt, dass der Schlüssel gelöscht wurde, wenn GC nach dem Löschen des Schlüssels auf WeaPhasMap besucht wurde.
Die WeepheasMap -Klasse ist nicht -synchronisiert. Unabhängig davon, ob es sich um die Zuordnung oder außerhalb der Zuordnung befindet, wird der Schlüssel automatisch entfernt, nachdem der Müllrecyler die schwache Referenz auf einen bestimmten Schlüssel entfernt hat. Es ist zu beachten, dass das Wertobjekt in der WeaChasMap von der allgemeinen Anziehung aufbewahrt wird. Daher sollten Sie darauf achten, sicherzustellen, dass das Wertobjekt nicht direkt oder indirekt auf seine eigenen Schlüssel verweist, da dies verhindern wird, dass die Spannung weggeworfen wird. Beachten Sie, dass das Wertobjekt den entsprechenden Schlüssel indirekt durch das WeaPhashMap selbst zitieren kann, was bedeutet eins.
Eine Möglichkeit, mit diesem Problem umzugehen, besteht darin, den Wert selbst in Weakreferentes zu packen, bevor Sie einfügen, wie z. "Das Backing -Gerät wird schnell fehlgeschlagen. Nachdem das iterative Gerät erstellt wurde, werden die Iteratoren jederzeit und auf jeden Fall geändert, wenn die Mapping aus der Struktur modifiziert wird, sofern die Iterator -Methode nicht entfernen oder hinzufügen, und der Iterator wird sein Werfen Sie die ConcurrentModificationException. Daher scheiterte der Iterator angesichts der Parallelitätsänderung zu jeder Zeit in Zukunft schnell nicht vollständig, anstatt ein Risiko für ein willkürliches ungewöhnliches Verhalten.
Beachten Sie, dass wir nicht sicherstellen können, dass der Iterator fehlschlägt.
Um den Einführungs- und Instanzcode im vorherigen umfassenden Code zusammenzufassen, können wir wissen, dass wir, wenn er Stapel, Warteschlangen usw. betrifft, in Betracht ziehen, die Liste zu verwenden. Für Operationen wie ein schnelles Einfügen und das Löschen von Elementen sollte die LinkedList verwendet werden. Wenn Sie schnell auf Elemente zugreifen müssen, sollten Sie ArrayList verwenden. Wenn das Programm in einer einzigen Umgebung oder nur in einem Thread in einem Thread unter Berücksichtigung nicht -synchronisierter Klassen durchgeführt wird, ist es effizient. Wenn mehrere Threads gleichzeitig eine Klasse betreiben können, sollte die Synchronklasse verwendet werden. Achten Sie besonders auf den Betrieb der Hash -Tabelle, und das Objekt des Equals und HashCode als Schlüssel besteht darin, die Methoden für Gleiche und HashCode korrekt zu schreiben. Versuchen Sie, die Schnittstelle anstelle von tatsächlichen Typen wie der Rückgabeliste anstelle von ArrayList zurückzugeben.
Dieser Artikel ist nur für die Freigabe der Anwendungsebene.