2016-04-06 7 views
-3
//Represents a seat on a plane. 
public class Seat { 

    //The section that the seat is in. 
    public int sectionId; 
    public int seatId; 

    public Seat(int seatId, int sectionId) { 
     this.seatId = seatId; 
     this.sectionId = sectionId; 
    } 

} 

Das oben genannte enthält nur die "Einstellungen", die ich für jeden Platz errate. Ich versuche, den Konstruktor in einer Karte rufen jeden eindeutigen Sitz mit einem Sitztyp zu (Erwachsene/Kinder)/hier ist, was ich kam mit:Konstruktor als Schlüssel in einer Hashmap?

public enum SeatType { 
    ADULT, 
    CHILD; 
} 

private static Map<Seat, SeatType> map = new LinkedHashMap<>(); 

public static void main(String[] args) { 
    int sectionId = 5; 
    map.put(new Seat(1, 5), SeatType.ADULT); 
    System.out.println(map.get(new Seat(1, 5))); 

Ausführung dieses Codes heraus druckt „null“ zur Konsole. Ich weiß, dass ich für jeden Sitz leicht ein neues Objekt erstellen kann, aber das ist nicht wirklich eine Option, denn das würde bedeuten, dass ich mehr als 200 Objekte erstellen müsste.

Ich habe nicht erwartet, dass es funktioniert, aber ich suchte nach einer Erklärung, warum es nicht funktioniert und vielleicht eine mögliche Lösung für das Problem.

Vielen Dank im Voraus! (Und tut mir leid, noch ein Anfänger).

Antwort

1

Sie müssen die equals und hashCode Methoden Ihrer Seat Klasse überschreiben. Versuchen Sie, Ihre Seat Klasse auf die folgende Veränderung:

public class Seat { 

    public int sectionId; 
    public int seatId; 

    public Seat(int seatId, int sectionId) { 
    this.seatId = seatId; 
    this.sectionId = sectionId; 
    } 

    @Override 
    public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 

    Seat seat = (Seat) o; 
    if (sectionId != seat.sectionId) return false; 
    return seatId == seat.seatId; 
    } 

    @Override 
    public int hashCode() { 
    int result = sectionId; 
    result = 31 * result + seatId; 
    return result; 
    } 
} 

das Problem dadurch behoben, da die hashCode Methode spielt eine wichtige Rolle beim Hinzufügen und suchen Sie Ihren Wert als Schlüssel zu einem HashMap, LinkedHashMap, HashSet, etc. Wenn Sie überschreiben Sie hashCode, Sie sollten auch equals überschreiben und umgekehrt.

Werfen Sie einen Blick auf die folgenden Fragen für weitere Informationen:

Verwandte Themen