3 Stimmen

Verwendung einer Liste innerhalb einer Karte (Java)

Ich verwende eine HashMap, in der ich eine ArrayList als Wert verwenden.

Zum Beispiel so:

Map<Movie, List<Grades>> gradedMovies = new HashMap();

Ich versuche, eine Methode zu erstellen, mit der ich durch die Werte iterieren könnte, um zu sehen, ob ein Schlüssel (Film) bereits existiert. Wenn dies der Fall ist, möchte ich einen neuen Wert (Note) in die Liste aufnehmen, der dem jeweiligen Schlüssel (Film) zugeordnet ist. Etwa so:

public void addGrade(Movie movie, Grade grade) {
// stuff here }

Letztendlich möchte ich eine Karte ausdrucken können, auf der die Filme und ihre Noten angezeigt werden, nachdem sie der Karte hinzugefügt worden sind.

Wie wird dies bewerkstelligt? Oder ist mein ganzer Ansatz (Verwendung einer Karte) völlig falsch?

Danke für jede Hilfe. (Dies ist eine Hausaufgabe)

4voto

Ich denke, Sie sind auf dem richtigen Weg, stellen Sie einfach sicher, dass Ihr Filmobjekt die folgenden Funktionen implementiert equals y hashCode damit es als echter Schlüssel für die Hash-Map funktionieren kann.

Wenn Sie einen schönen Ausdruck wünschen, implementieren Sie einfach die Methode toString.

public void addGrade(Movie movie, Grade grade) {
    if (!gradedMovies.containsKey(movie)) { 
        gradedMovies.put(movie, new ArrayList()); 
    }
    gradedMovies.get(movie).add(grade);
}

Ich hoffe, das hilft, Prost!

3voto

Paul Vargas Punkte 40201

Sie können so etwas verwenden:

public void addGrade(Movie movie, Grade grade) {
    if (!gradedMovies.containsKey(movie)) {
        gradedMovies.put(movie, new ArrayList<Grade>());
    }
    gradedMovies.get(movie).add(grade);
}

Sie müssen die Methode equals

3voto

Andrzej Doyle Punkte 99892

Ich weiß nicht, warum Sie speziell nach einem Index suchen - die Punkt eines Map ist, dass Sie die Einträge anhand ihrer Schlüssel nachschlagen können.

Als Ausgangspunkt sollte also die erste Zeile Ihrer addGrade Methode könnte wie folgt aussehen

List<grades> grades = gradedMovies.get(movie);

und Sie können hoffentlich von dort aus weitermachen. (Denken Sie daran, sich die Dokumentation um zu sehen, was passiert, wenn die Karte den angegebenen Film noch nicht enthält...)

2voto

Thomas Punkte 84982

Ich könnte die Werte durchlaufen, um zu sehen, ob ein Schlüssel (Film) bereits existiert

Sie brauchen die Karte nicht zu iterieren, sondern rufen einfach gradedMovies.containsKey( movieToCheck ) .

Beachten Sie, dass bei der Verwendung von Movie als Schlüssel sollten Sie eine sinnvolle Implementierung von equals() y hashCode() .

2voto

Fritz Punkte 9937

Sie machen das gut, aber Sie sollten ein paar Dinge beachten:

Bei der Suche nach einem Wert auf der Karte muss Ihr Movie-Objekt die folgenden Parameter überschreiben ist gleich und hashChode. Java verwendet für Vergleiche immer die Methode equals, vor allem, wenn es sich um automatische Vergleiche handelt (z. B. um zu überprüfen, ob eine Liste ein Element enthält oder, in diesem Fall, ob ein Schlüsselwert gleich einem bestimmten Wert ist). Denken Sie daran, dass Gleichheit die Einzigartigkeit eines Artikels definiert Daher sollten Sie einen Vergleich auf der Grundlage eines besonders eindeutigen Attributs, wie einer Identifikationsnummer oder (in diesem Fall) des Namens, durchführen.

Zum Drucken der Karte, iterieren über das KeySet, entweder manuell ( erweiterte "for"-Schleife ) oder mit einem Iterator (der direkt über die Funktion .iterator() Methode). Für jeden Film drucken Sie die Liste der Noten auf ähnliche Weise aus.

Ich weiß nicht, ob Sie mit dem Drucken von Zeichenketten vertraut sind, aber einige spezielle Zeichenkombinationen können zu einer Zeichenkette hinzugefügt werden, um ihr eine Art von Formatierung zu geben. Zum Beispiel:

  • \n wird ein Zeilenumbruch eingefügt
  • \t ist eine Tabellierung

Ich hoffe, das hilft, einige Zweifel zu beseitigen. Viel Glück!.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X