2017-02-03 1 views
-3

Ich habe folgendes HashMap:Wie ersetzt man Array in Hashmap in Java?

["Hello": ([342342342332, 20], [3230239323, 21])] 

..., die ich so erstellt ...

Map<String, List<long[]>> interestingMap = new HashMap<>(); 
interestingMap.put("Hello", new ArrayList<>()); 
interestingMap.get("Hello").add({342342342332L, 20L}); 
interestingMap.get("Hello").add({3230239323L, 21L}); 

Ich möchte den zweiten Wert in der Arraylist in "interestingMap" auf sich ändern, je der erste Wert der ArrayList. Wenn also der erste Wert = "342342342332" ist, möchte ich den zweiten Wert von "20" auf "30" aktualisieren. Diese

ist das, was ich bisher:

for (long[] interestingValue : interestingMap.get("Hello")) { 
    if (interestingValue[0] == 342342342332) { 
     interestingMap.get("Hello").set(interestingValue[0],30); 
    } 
} 

Dies nicht zu funktionieren scheinen. Irgendwelche Ideen? Vielen Dank.

+0

('Arraylist <>' = 'long [] []'!) – CraigR8806

+0

java: inkompatible Typen: nicht Typargumente für java.util.ArrayList <> Grund folgern: keine Instanz (en) des Typs Variable (n) E existieren, so dass java.util.ArrayList entspricht lange [] [] –

+0

einen Fehler gemacht - es ist jetzt aktualisiert – TheBigDoubleA

Antwort

2

Dies ist, was Sie haben sollten:

for (long[] interestingValue : interestingMap.get("Hello")) { 
    if (interestingValue[0] == 342342342332L) { 
     interestingValue[1] = 30L; 
    } 
} 

dieses:

interestingMap.get("Hello").set(interestingValue[0],30); 

am Index des Elements in der Liste nehmen "interestingValue [0]", das ist "342342342332" und wahrscheinlich existiert nicht und ersetzt es vollständig mit "30", was mich überrascht, wenn es sogar kompiliert, weil es nur eine Ganzzahl ist und die Liste Arrays von langen nehmen.

Ich weiß nicht, warum Sie ein Array in einer Liste innerhalb einer Karte haben, könnten Sie einen völlig akzeptablen Grund haben, aber eine Möglichkeit ist, dass Sie nicht die Objekte erstellen, die Sie sollten und zu viel auf vorhandenen Java verlassen Objekte, also nehmen Sie sich Zeit, um zu überlegen, ob Sie es besser machen könnten, indem Sie einige Objekte erstellen.

Lesen Sie auch die APIs: https://docs.oracle.com/javase/7/docs/api/java/util/List.html

0
private static void changeInteresting(){ 
     Map<String, List<long[]>> interestingMap = new HashMap<>(); 
     interestingMap.put("Hello", new ArrayList<>()); 
     long [] first=new long[]{342342342332L, 20L}; 
     long [] second=new long[]{3230239323L, 21L}; 
     interestingMap.get("Hello").add(first); 
     interestingMap.get("Hello").add(second); 
     int index=0; 
     for (long[] interestingValue : interestingMap.get("Hello")) { 
       if (interestingValue[0] == 342342342332L) { 
        interestingValue[1]=30L; 
        interestingMap.get("Hello").set(index, interestingValue); 
       } 
       index++; 
      } 


     System.out.println(interestingMap); 
    } 

Bitte ans auf Ihre Fragen finden. Ich habe ein bisschen entsprechend modifiziert, richtig arbeitend.