Frage

Ich habe eine Methode, die die möglichen Zustände in einem Vorstand durchläuft und sie in einem HashMap speichert

void up(String str){
  int a = str.indexOf("0");
  if(a>2){
   String s = str.substring(0,a-3)+"0"+str.substring(a-2,a)+str.charAt(a-3)+str.substring(a+1);
   add(s,map.get(str)+1);
   if(s.equals("123456780")) {
    System.out.println("The solution is on the level  "+map.get(s)+" of the tree");

        //If I get here, I need to know the keys on the map
       // How can I store them and Iterate through them using 
      // map.keySet()?

   }
  }

}

Ich interessiere mich für die Gruppe der Schlüssel. Was soll ich tun, um sie alle zu drucken?

HashSet t = map.keySet() wird sowohl vom Compiler als auch vom Compiler abgelehnt

LinkedHashSet t = map.keySet()
War es hilfreich?

Lösung

Verwenden:

Set<MyGenericType> keySet = map.keySet();

Versuchen Sie immer, den Schnittstellentyp für Sammlungen anzugeben, die von diesen Methoden zurückgegeben wurden. Auf diese Weise wären Sie in Ordnung, unabhängig von der tatsächlichen Implementierungsklasse des Sets, das von diesen Methoden zurückgegeben wird (in Ihrer Fallkarte.Keyset ()). Wenn die nächste Version die JDK -Jungs eine andere Implementierung für den zurückgegebenen Set verwenden, funktioniert Ihr Code weiterhin.

map.keyset () gibt eine Ansicht auf die Schlüssel der Karte zurück. Änderungen an dieser Ansicht führen dazu, dass die zugrunde liegende Karte geändert wird, obwohl diese Änderungen begrenzt sind. Sehen Sie sich die Karte Javadoc an:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/map.html#keyset%28%29

Andere Tipps

Map<String, String> someStrings = new HashMap<String, String>();
for(Map.Entry<String, String> entry : someStrings.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
}

So itere ich gerne durch Karten. Wenn Sie speziell nur den Keyset () möchten, ist diese Antwort an anderer Stelle auf dieser Seite.

for ( String key : map.keySet() ) { 
 System.out.println( key );
}

Setzen Sie t = map.Ketset ()

Die API gibt nicht an, welche Art von SET zurückgegeben wird.

Sie sollten versuchen, Variablen eher als Schnittstelle als als bestimmte Implementierung zu deklarieren.

Gerade

Set t = map.keySet();

Wenn Sie nicht einen älteren JDK verwenden, ist es meiner Meinung nach ein wenig sauberer, Generika bei der Verwendung der Sammlungsklassen zu verwenden.

So das ist

Set<MyType> s = map.keySet();

Und wenn Sie sie nur durch sie durchsetzen, können Sie jede Art von Schleife verwenden, die Sie möchten. Wenn Sie jedoch die Karte basierend auf diesem Schlüsselset ändern möchten, müssen Sie den Iterator des Schlüsselsatzes verwenden.

Alles, was garantiert ist keySet() ist etwas, das die Schnittstelle implementiert Set. Und das könnte möglicherweise eine undokumentierte Klasse sein wie SecretHashSetKeys$foo, also programmieren Sie einfach auf die Schnittstelle Set.

Ich bin auf diesen und versuchte, einen Blick auf eine zu sehen TreeSet, Der Rückgabetyp wurde am Ende TreeSet$3 Bei enger Prüfung.

    Map<String, Object> map = new HashMap<>();
    map.put("name","jaemin");
    map.put("gender", "male");
    map.put("age", 30);
    Set<String> set = map.keySet();
    System.out.println("this is map : " + map);
    System.out.println("this is set : " + set);

Es stellt die Schlüsselwerte in die Karte in den Satz ein.

Aus Javadocs HashMap hat verschiedene Methoden, mit denen Daten aus einem HASMAP manipuliert und extrahiert werden können.

public Set<K> keySet()Gibt eine festgelegte Ansicht der in dieser Karte enthaltenen Schlüssel zurück. Der Satz wird durch die Karte unterstützt, sodass sich die Änderungen an der Karte im Set und umgekehrt reflektieren. Wenn die Karte geändert wird, während eine Iteration über den Satz im Gange ist (mit Ausnahme des Operation des Iterators), sind die Ergebnisse der Iteration undefiniert. Das Set unterstützt die Entfernung von Elementen, die die entsprechende Zuordnung von der Karte über die Iterator.Remove, Set.Remove, RemoveAll, Retainall und Clear Operations entfernt. Es unterstützt nicht die addall- oder Addall -Operationen. Spezifiziert von: Schlüsselset in Schnittstellenkarte Überschreibungen: Keyset in der Klasse AbstractMap Rückgabe: Eine festgelegte Ansicht der in dieser Karte enthaltenen Tasten

Wenn Sie also eine Karte MYMAP eines Datentyps haben, so dass die Karte als definiert ist map<T> Wenn Sie es wie folgt iterieren:

for (T key : myMap.keySet() ) { 
     System.out.println(key); // which represent the value of datatype T
}

zB, wenn die Karte als definiert wurde als Map<Integer,Boolean>

Dann haben wir für das obige Beispiel:

for (Integer key : myMap.keySet()){
  System.out.println(key) // the key printed out will be of type Integer
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top