Ich muss einen Schlüssel mit mehreren Werten speichern, aber meine Werte sollten eine Zeichenfolge und ein Int sein. Für dieses Problem muss ich List, Stack, Queue oder Map verwenden. Ich denke, dass Map die richtige Wahl ist.

Ich habe viele Paar Schuhe und jeder Schuh hat eine Größe, eine Farbe und einen Preis. Die Paar Schuhe müssen nach ihrer Größe bestellt werden.

Ich dachte, der Schlüssel könnte die Größe der Schuhe sein und die Werte sollten die Farbe und der Preis sein, aber ich weiß nicht, wie ich das umsetzen soll.

Zum Beispiel habe ich:

Paar 1, Größe 36, Farbe schwarz, Preis 30 $
Paar 2, Größe 36, Farbe Weiß, Preis 35 $
Paar 3, Größe 37, Farbe schwarz, Preis 40 $
Paar 4, Größe 38, Farbe schwarz, Preis 45 $

Wie könnte ich all dies mit Map speichern (glaube ich), ohne zum Beispiel eine neue Klasse von Schuhen zu erstellen?

Update: Ich darf auch SortedMap, SortedList usw. verwenden. Im zweiten Teil des Problems muss ich Schuhe einer bestimmten Größe hinzufügen und entfernen.

0
MMM 18 Jän. 2019 im 21:19

4 Antworten

Beste Antwort

Wenn Sie eine Karte verwenden, muss jeder Schlüssel eindeutig sein. Sie können die Größen nicht als Schlüssel verwenden, da sie nicht eindeutig sind.

Aus Ihrer Problembeschreibung:

Ich habe viele Paar Schuhe und jeder Schuh hat eine Größe, eine Farbe und ein Preis. Die Paar Schuhe müssen nach ihrer Größe geordnet sein.

Eine Karte scheint keine gute Wahl zu sein, da Karten im Allgemeinen nicht bestellt sind (außer SortedMap). Sie möchten eine Datenstruktur, die nach bestimmten Kriterien geordnet werden kann. Ein List scheint eine wirklich gute Wahl zu sein. Die häufigste Implementierung von list ist ArrayList.

Sie benötigen zunächst eine Klasse, um Ihr Schuhobjekt zu speichern, das folgendermaßen aussehen sollte:

public class Shoe{
    int size;
    Color color; // Color is an enum, but it can be a String if you want to be less restrictive
    int price;

    public Shoe(int size, Color color, int price) {
    ...
}

Dann können Sie Ihre Schuhe folgendermaßen in Ihrer Liste speichern:

List<Shoe> shoes = new ArrayList<>();
shoes.add(new Shoe(36, Color.BLACK, 30));
shoes.add(new Shoe(36, Color.WHITE, 35));
shoes.add(new Shoe(37, Color.BLACK, 40));
shoes.add(new Shoe(38, Color.BLACK, 40));
...

Und sobald Ihre Liste gefüllt ist, können Sie sie nach Größe sortieren:

shoes.sort(Comparator.comparing(Shoe::getSize));

Alternative: Sie können mit demselben Komparator eine TreeMap<Integer,List<Shoe>> (eine sortierte Karte, die Schlüssel einer Liste zum Auflösen von Schlüsselkollisionen zuordnet) erstellen. Selbst wenn Sie neue Schuhe einfügen, bleibt diese geordnet, sieht aber außerhalb der Ebene Ihres Problems.

0
Ricola 18 Jän. 2019 im 21:17

Sie können 2 Karten für diese Zwecke verwenden. Die erste Karte enthält den Namen der Schuhe als Schlüssel und die Karte als Wert. Zweite Karte - Eigenschaften. Etwas wie:

Map<String, Map<String, Object>> shoes = new HashMap<>();
Map<String, Object> shoeProps = new HashMap<>();
shoeProps.put("color", "red");
shoeProps.put("size", 38);
shoeProps.put("price", 35);
shoes.put("nike", shoeProps);
0
ZhenyaM 18 Jän. 2019 im 18:43

Erster Schritt: Verstehen Sie die Daten.

Sie haben keine einzige Datenkarte, sondern eine Kartenhierarchie für Ihre Daten.

Obere Karte: Ordnet die Schuhgröße einer Karte mit "Details" zu.

Detailkarte: Kartenfarbe zum Preis

0
DwB 18 Jän. 2019 im 18:48

Wenn Sie Map zum Speichern verwenden möchten und der Schlüssel möglicherweise gleich ist, verwenden Sie Google Guava Multimap

0
TongChen 19 Jän. 2019 im 01:50