Speichern einer HashMap in einer HashMap und Verbesserung der Leistung

Ich soll erstellt, um eine HashMap in einem anderen HashMap wie unten gezeigt, die ein speichern kann der Wert innerhalb der inneren HashMap basiert auf dem Schlüssel des äußeren HashMap zur Laufzeit

d.h. erforderliche Leistung für das Programm sollte im format

   { 1 = {11 = "aaa",15 = "bbb"}, 2 = {13 = "ccc", 14 = "ddd"} }

wo 1,2 sind Schlüssel-Werte für die Äußere HashMap.

Unten ist der Code für ihn Ist es der bessere Ansatz ist, um die Leistung zu verbessern

HashMap<Integer, HashMap<Integer, String>>Outer 
                   = new HashMap<Integer, HashMap<Integer,String>>();

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int count = Integer.parseInt(br.readLine());
    for(int i =0;i<count;i++)
    {
        String input[] = br.readLine().split("\\s");

        //HashMap<Integer,String>inner = new HashMap<Integer, String>();
        int key = Integer.parseInt(input[0]);
        if(Outer.isEmpty() || !Outer.containsKey(key))
        {
            HashMap<Integer, String> inner = new HashMap<Integer, String>();
            inner.put(Integer.parseInt(input[1]),input[2]);
            Outer.put(key, inner);
        }
        else if(Outer.containsKey(key))
            {
                HashMap<Integer, String> inner = (HashMap<Integer, String>) Outer.get(key).clone();
                inner.put(Integer.parseInt(input[1]), input[2]);
                Outer.put(key, inner);
            }
    }
Warum denken Sie, dass Sie benötigen, um die Leistung zu verbessern? Ist dieser code unter eine außerordentliche Menge an Zeit ausführen?
Ich denke, mit einem zwei-Niveau hashmap ist eher die Leistung reduzieren als Sie zu erhöhen.
Während es ist nicht klar, es könnte sein, ausgegangen von der Frage, dass die Aufspaltung in 2-Karten, die nicht aus Gründen der Leistung. Beachten Sie, dass die Bestimmung, für die äußere Karte ist aus dem gelesen werden die input - und nicht einen anderen berechneten hash. Ich denke, die Frage zielt auf die Verbesserung der Leistung der vorliegenden Implementierung erfordert die Verwendung von verschachtelten maps.
Erstens vielen Dank an alle für die Antworten. Ich war die Implementierung der gleichen Funktion zum extrahieren dieser datastructure um eine prefetch-Daten aus der Datenbank und die Anzahl der Elemente, die für die innere Hashmap erhöht es verursacht Verzögerung als Klon ist eine vordefinierte Methode von java, die nicht twicked also ich wollte wissen, ob kann es einige andere bessere Ansatz, anstatt abhängig von vordefinierten Methode von java
Wenn Ihr zwei-level-HashMap ist nicht erforderlich, Ihre Daten-Modell, aber nur in einem Versuch für die Leistung - ich Stimme mit Tom - es gibt noch mehr overhead hier, und Sie wären besser dran mit einem einzigen HashMap. Ich bin mir nicht sicher, wie Sie Sie clone() bezieht sich auf diese Diskussion, wie Sie gar nicht brauchen. Die absolute beste, was Sie vermutlich tun können, um Leistung zu erhöhen, da die zusätzlichen details, die Sie nur zur Verfügung gestellt, ist die Initialisierung der HashMap mit einer erwarteten Kapazität, z.B. new HashMap(5000). Wenn Sie einen richtigen Wert gewählt wird, wird dies verhindern, dass die Größe, wie Sie wahrscheinlich beobachtet.

InformationsquelleAutor cryptonkid | 2012-01-14

Schreibe einen Kommentar