Frage

Ich frage mich, ob es eine Klasse gibt, die implementiert sowohl die Map und List Schnittstellen in Java.

Ich habe eine Datenstruktur, die in erster Linie ein Map ist. I Karte Strings (IDs) zu Images. Aber in einem bestimmten Teil meines Codes, ich brauche den Benutzer mit allen verfügbaren ided Images darzustellen. Der einzige Weg, das zu tun, so weit ist, dies zu schreiben:

for (String id : myMap.keySet()) {
    // get the image like this "myMap.get(id)" 
}

So wäre es schön, eine Klasse zu haben, die sowohl Map und List implementiert, so konnte ich einfach schreiben:

for (Image img : myMap) {
  // the image is img
}

Kennt jemand eine solche Implementierung?

Bearbeiten : Nachdem die Antworten sehen (das sind alle richtig gestimmt up), ich weiß jetzt, würde ich auch die Karte müssen sortiert werden. Als ich „sortiert“ sagen, alles, was ich meine ist, dass ich es möchte die Werte in einer bestimmten Reihenfolge haben, eine, die ich zu ändern in der Lage wäre zu. Ich weiß, dass dies nicht die ursprüngliche Frage, aber ich erkennen, dass ich das brauche.

EDIT 2 : Es scheint, ich bin unentschlossen. Was ich brauche, ist eine geordnete Karte, kein sortierter ein. Sorry für die Verwirrung, die Menschen.

War es hilfreich?

Lösung

Wenn Sie Ihre Artikel in einer bestimmten Reihenfolge benötigen, LinkedHashMap ist dein Freund - es hält Artikel in Auftrag. TreeMap Ihre Einzelteile in einem Auftrag entweder durch einen Komparator definiert halten Sie geben oder eine Methode compareTo des Schlüssels.

Andere Tipps

Für eine geordnete Karte, schauen Sie sich die LinkedHashMap . Das wird Ihre Schlüssel in der Reihenfolge des Einfügens halten.

Wenn Sie einen SortedMap es die Schlüssel in sortierter Reihenfolge halten. (Der TreeMap ist die häufigste Umsetzung. )

Was können Sie verwenden, ist map.entrySet(). Das ermöglicht es Ihnen, über den Satz von MapEntries iterieren.

Überprüfen Sie die javadoc aus für ein bisschen mehr Info.

Sie haben bereits eine Reihe von praktischen Antworten. Aber direkt die Frage zu beantworten ...

  

ich irrte, wenn es eine Klasse gibt, die sowohl Karte und Liste Schnittstellen in Java implementiert.

... es lohnt sich zu erwähnen, dass es einfach unmöglich ist. remove(Object) Methode ist das Hindernis.

In Map Schnittstelle seine Unterschrift lautet:

V remove(Object key);

Und in List Schnittstelle ist es:

boolean remove(Object o);

können Sie mit der Map.values() Methode, die ein Collection zurück.

Dies gibt Ihnen eine Sammlung der gespeicherten Werte

myMap.values()

Versuchen Sie folgendes:

for (Image img : myMap.values()) {
    // the image is img
}

Bei sortierten Karte sehen java.util.SortedMap Implementierungen. java.util.TreeMap ist die am häufigsten Wahl. Wenn Sie nur Iterationsreihenfolge garantiert benötigen, können Sie versuchen, java.util.LinkedHashMap . Es bietet Iteration in der gleichen Reihenfolge, wie Sie Elemente zur Karte setzen. Oder gegebenenfalls in letzter zugegriffen Reihenfolge. Wenn Sie möchten, dass die Taste (einmal hinzugefügt) bis zum Ende der Karte bewegen, müssen Sie es explizit entfernen und wieder setzen.

Sie verwenden ein TreeMap es wird entsprechend der natürlichen Ordnung der Schlüssel sortiert, oder durch einen Komparator auf Karte Erstellungszeit zur Verfügung gestellt:

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());

Dabei gilt ByNameComparator () ist ein Vergleicher. Alternativ können Sie die Werte () methond verwenden und Art Collections.sort mit ():

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top