1. Initialisierung von HashMap
1. Literarische Schreibmethode der HashMap -Initialisierung
HashMap ist eine häufig verwendete Datenstruktur, die im Allgemeinen als Datenwörterbuch oder Container für die Hash -Suche verwendet wird. Gewöhnliche Jugendliche initialisieren dies normalerweise:
HashMap <String, String> MAP = New HashMap <String, String> ();
Nach dem Lesen dieses Codes denken viele Leute, dass es zu ausführlich ist, um ihn so zu schreiben.
HashMap <String, String> MAP = New HashMap <String, String> () {{Put ("Name", "Juni"); Nun, es sieht viel eleganter aus und es wird in einem Schritt gemacht, und es ist auf einmal gemacht. Dann kommt die Frage, einige Kinderschuhe werden sich stellen: Nani? Was genau bedeutet die Doppelklammern und was sind die Verwendungen? Haha, es ist eigentlich sehr einfach.
public class test { /*private statische HashMap <String, String> MAP = New HashMap <String, String> () {{Put ("Name", "June"); };*/ public test () {System.out.println ("Konstruktor namens: Der Konstruktor heißt"); SYSTEM .OUT.println ("Instance Initializer genannt: Instanz initializer"); ====================================================== ====================================================== =============================== Ausgabe:
Statischer Block mit dem Namen: Statischer Block heißt Instance Initializer mit dem Namen: Instance Initializer heißt Konstruktor heißt: Konstruktor heißt ========================= ========== Instanzinitializer mit dem Namen: Instanzinitialisierung heißt Konstruktor mit dem Namen: Der Konstruktor heißt
Das heißt, die erste Schicht von Klammern definiert tatsächlich eine anonyme innere Klasse (anonyme innere Klasse), und die zweite Schicht von Klammern ist tatsächlich ein Instanz -Initialisiererblock, der ausgeführt wird, wenn die interne anonyme Klasse konstruiert wird. Dieser Block wird als "Instanzinitialisierungsblöcke" bezeichnet, da sie im Rahmen einer Instanz einer Klasse definiert sind.
Wenn der obige Code nach dem Kompilieren in der Testklasse geschrieben ist, werden Sie feststellen, dass der Test $ 1. Class -Datei generiert wird und der Inhalt der Datei zerlegt wird:
D:/eclipse_indigo/Workspace_Home/cdhjobs/bin/pvuv/> JAD -P -Test $ 1.CLASS
// Dekompiliert von Jad v1.5.8g. Test .java
Paket pvuv.zhaopin; import Java.util.hashMap; // Referenzierte Klassen von Paket pvuv.zhaopin: // Testklasse test $ 1 erweitert Hashmap // Erstellen Sie eine Hashma in {} in den Konstruktor eingesetzt.D:/eclipse_indigo/workspace_home/cdhjobs/bin/pvuv/>
2. Die Schreibmethode durch Erweiterung und im weiteren Sinne kann bei der Initialisierung von ArrayList und beispielsweise so gespielt werden, dass Sie auch so spielen können:
Liste <string> names = new ArrayList <String> () {{für (int i = 0; i <10; i ++) {add ("a"+); . 3. Java7: Fügen Sie Unterstützung für Sammlungen in Java 7 hinzu, Sie können Kollektionen wie Ruby, Perl und Python erstellen.
Hinweis: Diese Sammlungen sind unveränderlich.
PS: Da der Originaltext [5] den Autor nicht angegeben hat, dass diese neuen Funktionen von Java 7 eingeführt wurden, versuchen Sie es für Schüler, die eine Nachricht hinterlassen und einen Fehler melden, bitte, wenn er größer als 1,7.0_09 oder Java 8 ist?
Listliste = New ArrayList (); MAP <String, Integer> MAP = New HashMap <String, Integer> (); String> list = ["item"]; ["Schlüssel"];
4. Potenzielle Probleme im literarischen und künstlerischen Schreiben. Hier listen wir die Nachteile dieser Methode auf.
1. Diese Methode ist eine anonyme Methode für interne Klassenerklärung, daher enthält die Referenz Referenzen auf externe Klassen. Wenn der Satz serialisiert ist, wird die externe Klasse unbewusst serialisiert.
2. In dem obigen Beispiel erklärt es tatsächlich eine von HashMap geerbte Unterklasse. Einige Serialisierungsmethoden, wie beispielsweise bei der Serialisierung von GSON mit JSON oder Serialisierung mit XML, können die in der Klassenbibliothek bereitgestellten Methoden nicht serialisieren Unterklassen von Hashset oder HashMap, was zu einer Serialisierung führte. Lösung: In ein HashMap -Objekt neu initialisieren:
New HashMap (Karte);
Dies ermöglicht eine normale Initialisierung.
5. Ausgabe der Ausführungseffizienz Wenn ein neues Tool oder eine neue Schreibmethode erscheint, heißt es in den Affen: Wie ist die Leistung? (Der erste Satz, über Mädchen mit Jungen zu sprechen, lautet normalerweise: "Wie sehen Sie aus? Wie viele Messungen?" Das gleiche Prinzip :))
In Bezug auf diese beiden Schreibmethoden habe ich die literarischen und gewöhnlichen Schreibmethoden in meinem Notizbuch getestet und 10.000.000 Karten erstellt.
public class test {public static void main (String [] args) {long st = system.currentTimillis (); HashMap <String, String> () {{put ("name", "Juni"); ; // 1217 */ for (int i = 0; i <10000000; i ++) {HashMap <String, String> map = new Hashmap <String, String> (); ; map.put ("qq", "2572073701") 6. Einige variable Initialisierungsprobleme, die mit Instanzinitialisierungsblöcken verbunden sind. Was denkst du, sind die Werte von A, B und C? Kann es den Grund erklären?
Tipps: Wenn Sie diesen Mechanismus nicht kennen, wird empfohlen, die Bytecode -Datei zu dekompilieren.
6.1 Testquellcode
public class test {int e = 6; B = 22; out.println ("h - Mitgliedsvariable:" + this.h); .out.println ("A:" + neuer Test (). A); () .C); "E:" + neuer Test (). E); 6.2 Bytecode Dekompilierung:
// Dekompiliert von Jad v1.5.8g. Test .javaMport Java.io.Printstream; = 7; /u6210/u5458/u53d8/u91cf/uff1a ")). append (this.h) .toString ()); )) .Append (h) .ToString ()); ()) .A) .ToString ()); println ((neuer StringBuilder ("C:")). ). println ((neuer StringBuilder ("E:")). Anhang ((neuer Test ()). E) .ToString ()); neuer Test (). }} 6.3 Ausgabe: A: 33 B: 22 C: 11 D: 44 F: 5 E: 6 H - Mitgliedsvariable: 8 H - Lokale Variable: 88 g: 77
2. Beispiel für die HashMap -Traversalmethode
Der erste Typ:
MAP = New HashMap (); .GetKey ();
Hocheffizienz müssen Sie diese Methode in Zukunft anwenden!
Der zweite Typ:
MAP = New HashMap ();
Ineffizient, versuchen Sie in Zukunft so wenig wie möglich zu verwenden!
Es gibt zwei häufig verwendete Methoden zum Durchqueren von HashMap, dh Keyset und Einstiegssatz zum Durchlaufen, aber die Durchfahrten der beiden sind unterschiedlich.
public class hashmaptest {public static void main (String [] args) ... {HashMap HashMap = new Hashmap (); "Danke"); (HashMap.get (Iterator.Next ()); () ... {java.util.hashMap hashmap = new java.util.hashMap (); ); .Entry -Eintrag = (java.util.map.Entry) iT.Next (); .Print (Entry.getValue ()); Der Keyset überquerte tatsächlich zweimal, sobald er in Iterator konvertiert wurde, und sobald er den Wert des Schlüssels aus dem Hashmap herausgenommen wurde. Der Einstiegssatz durchquerte erst zum ersten Mal und steckte sowohl den Schlüssel als auch den Wert in den Eintrag, so dass er fast fertig war.
Hinweis: Die Traversal -Methode von Hashtable ähnelt dem oben genannten!