603 Stimmen

Wie kann man die Hashmaps verwenden?

Ich habe dieses Feld:

HashMap<String, HashMap> selects = new HashMap<String, HashMap>();

Für jede Hash<String, HashMap> Ich muss eine ComboBox , deren Elemente der Wert (der zufällig selbst eine HashMap ist) von HashMap <String, **HashMap**> .

Zur (nicht funktionierenden) Demonstration:

for (int i=0; i < selects.size(); i++) {
    HashMap h = selects[i].getValue();
    ComboBox cb = new ComboBox();

    for (int y=0; y < h.size(); i++) {
        cb.items.add(h[y].getValue);
    }
}

3 Stimmen

In Java 8 mit Lambda : stackoverflow.com/a/25616206/1503859

0 Stimmen

Java 8 mit Streams : stackoverflow.com/a/32343195/1216775 Ein Vorteil von Streams ist, dass sie auch parallelisiert werden können.

15voto

panahi Punkte 183

Ich mache im Allgemeinen das Gleiche wie cx42net, aber ich erstelle nicht explizit einen Eintrag.

HashMap<String, HashMap> selects = new HashMap<String, HashMap>();
for (String key : selects.keySet())
{
    HashMap<innerKey, String> boxHolder = selects.get(key);
    ComboBox cb = new ComboBox();
    for (InnerKey innerKey : boxHolder.keySet())
    {
        cb.items.add(boxHolder.get(innerKey));
    }
}

Das scheint mir einfach am intuitivsten zu sein, ich glaube, ich bin voreingenommen gegen die Iteration über die Werte einer Karte.

0 Stimmen

Wenn Sie über die gesamte Map iterieren, sollten Sie keine Lookups durchführen. Jeder Hash-Lookup mag O(1) sein, aber jetzt machen Sie n*O(1) davon für O(N), wenn die Gesamtzahl der benötigten Hash-Lookups 0 ist.

10voto

icyrock.com Punkte 26906

Utilisez entrySet ,

/**
 *Output: 
D: 99.22
A: 3434.34
C: 1378.0
B: 123.22
E: -19.08

B's new balance: 1123.22
 */

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MainClass {
  public static void main(String args[]) {

    HashMap<String, Double> hm = new HashMap<String, Double>();

    hm.put("A", new Double(3434.34));
    hm.put("B", new Double(123.22));
    hm.put("C", new Double(1378.00));
    hm.put("D", new Double(99.22));
    hm.put("E", new Double(-19.08));

    Set<Map.Entry<String, Double>> set = hm.entrySet();

    for (Map.Entry<String, Double> me : set) {
      System.out.print(me.getKey() + ": ");
      System.out.println(me.getValue());
    }

    System.out.println();

    double balance = hm.get("B");
    hm.put("B", balance + 1000);

    System.out.println("B's new balance: " + hm.get("B"));
  }
}

siehe vollständiges Beispiel hier:

2 Stimmen

Es funktioniert auf jeden Fall, ich benutze es jeden Tag :) Was genau funktioniert nicht? Wie Sie haben HashMap<String, HashMap> benötigen Sie zwei Schleifen - eine für die äußere und eine für die innere HashMap. Btw - du solltest definitiv die zweite HashMap tippen - ich weiß nicht, was du darin speicherst, aber so etwas wie HashMap<String, HashMap<string, String>> - obwohl, aus deinem Beispiel scheint es, dass du verwenden solltest HashMap<String, Set<String>> . Und noch etwas: Verwenden Sie Schnittstellen: Map<String, Map> wenn Sie können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X