So erstellen Sie eine iterierbar wrapper für TreeMap und HashMap (Java)?
Habe ich eine Klasse MyMap die wraps TreeMap.
(Sagen, es ist eine Sammlung von Hunden, die Schlüssel sind strings).
public class MyMap {
private TreeMap<String, Dog> map;
...
}
Ich würde gerne MyMap durchsuchbar mit der for-each-Schleife. Ich weiß, wie ich es getan habe, wenn meine Klasse war ein LinkedList-wrapper:
public class MyList implements Iterable<Dog> {
private LinkedList<Dog> list;
...
public Iterator<Dog> iterator() {
return list.iterator();
}
}
Aber eine solche Lösung nicht funktioniert, TreeMap, weil TreeMap nicht über einen iterator(). Also, wie kann ich MyMap durchsuchbar?
Und die gleiche Frage, außer MyMap wraps HashMap (statt TreeMap).
Dank.
- Es klingt wie Sie Fragen: "Wie kann ich Werte Durchlaufen einer TreeMap, um von den entsprechenden Schlüssel?" Ist, dass eine präzise Beschreibung?
- Nein. Die Frage ist, wie man wiederum MyMap in iterierbar, wenn MyMap ist eine Klasse, von meiner Schöpfung, die eine TreeMap Feld. Ich will, dass es iterierbar über die Werte der TreeMap-Feld (in der Reihenfolge, die von den entsprechenden Schlüssel). BTW: Die Frage ist beantwortet.
- Wenn die Frage beantwortet ist, dann warum ist es nicht markiert, dass Art und Weise?
- Wenn Sie denken, dass die Frage beantwortet ist, markieren Sie die beste Antwort als 'akzeptiert'.
Du musst angemeldet sein, um einen Kommentar abzugeben.
map.values().iterator()
geben Sie einen iterator über Ihre map-Werte!MyMap
definieren sollten, eineiterator()
Methode zurückgibt_map.entrySet().iterator()
Es ist, weil Sie können nur Durchlaufen, die Schlüssel oder die Werte von der Karte, nicht die Karte selbst
In der Regel können Sie dies tun:
Also, was ich Vorschlage, ist: hat Ihre Karte muss ein durchsuchbar? Nicht, wenn Sie nur wollen, um auf die Werte... oder der Schlüssel selbst.
Bedenken Sie auch, die Verwendung von Google-Weiterleitung Sammlungen wie ForwardingList
values().iterator()
TreeMap
oder ähnliches. Sie können jedoch auch Durchlaufen eine Karte die Einträge, die oft die nützlichsten Weg, zum Durchlaufen einer Karte..entrySet()
gibt den Inhalt der Map als eine Liste vonMap.Entry<K,V>
:s.key
verwendet, um die Iteration über die Werte.Karte.values() eine collection Sicht der Hunde enthalten in der Karte. Die collection iterator zurück, die Werte in der Reihenfolge, dass die Ihnen entsprechenden Tasten erscheinen in den Baum.
Dank Jonathan Feinberg.
Eine Möglichkeit sein kann, um zu definieren, eine entrySet() Methode gibt eine Menge zurück, und iteriere über die Menge.
For-each iteration würde wie folgt Aussehen: