2017-01-03 2 views
-1

ist, ich habe Enum:Iterieren Sie durch alle Objekte oder erstellen Sie eine Karte. Gibt es eine bessere Lösung

public enum Colour { 
    RED, BLUE, BLACK; 
} 

Und ich habe Car-Klasse:

public class Car { 
    private int id; 
    private Colour colour; 
    //other fields, getters and setters 
} 

Und ich habe eine Menge Autos in Map<Integer, Car> MAP_OF_CARS. Und ich muss zum Beispiel alle Autos anzeigen, die rot sind. Also hier ist meine Frage, was ist die bessere Lösung. Durch alle Autos in der Karte Iterieren oder Karte erstellen, wo die Liste der Autos durch Farbe definiert wird?

Erste Lösung:

public List<Car> getCarsByColor(Colour colour) { 
    List<Car> sameColour = new ArrayList<>(); 
    for (Car car : MAP_OF_CARS.values()) { 
     if(car.getColour().equals(colour) { 
     sameColour.add(car); 
     } 
    } 
    return sameColour; 
} 

Zweite Lösung: Während neues Auto-Objekt erstellen, ich habe es auf die Karte und in Folge hinzufügen will ich habe:

Map<Colour, List<Car>> CARS_BY_COLOURS; 
CARS_BY_COLOURS.put(Colour.RED, car1); 

Und statt für Schleife, Ich werde das tun:

public List<Car> getCarsByColor(Colour colour) { 
    return CARS_BY_COLOURS.get(colour); 
} 

Welche Lösung scheint professioneller zu sein?

+0

In der Regel ist die Karte die einfachere Lösung, aber sie hängt von der Anzahl der Schlüssel und Ihren Leistungs- und Speicherbeschränkungen ab. Es gibt keine einzige richtige Antwort. – shmosel

Antwort

3

Hier gibt es kein "richtig" oder "falsch", es kommt darauf an, was für Ihre Anwendung besser geeignet ist.

Die erste Lösung geht immer durch alle Autos. Angenommen, Sie haben eine mehr oder weniger gleichmäßige Verteilung von Autos nach Farben, würde das bedeuten, dass Sie dreimal so viele Autos durchlaufen würden.

Die zweite Lösung, auf der anderen Seite, gibt Ihnen einfachen Zugriff auf die Autos der gewünschten Farbe, aber hat einige Speicheraufwand für das Halten einer zweiten Karte.

Es läuft alles auf die Anforderungen der Anwendung. Wenn alle Autos nach Farbe sortiert werden, ist dies eine seltene Operation, oder wenn Speicheranforderungen eine Rolle spielen, könnte die erste Lösung bevorzugt werden. Wenn alle Autos einer bestimmten Farbe in der Anwendung üblich sind, wäre die zweite Option wahrscheinlich besser.

3

was ist eine bessere Lösung. Durch alle Autos in der Karte Iterieren oder Karte erstellen, wo die Liste der Autos durch Farbe definiert wird?

Es hängt davon ab, wie oft Sie suchen und wie oft Sie aktualisieren.

Wenn Sie nur zwei Dinge haben (ID und Farbe in diesem Beispiel), dann sind parallele Karten die einfachste Lösung.

Wenn Sie mehr als ein Paar betrachten, müssen Sie die Frequenz besser in Betracht ziehen, da eine Karte, die Sie nur selten benutzen, ständig aktualisiert wird, ist nicht ideal.

Je nachdem, wie viele Objekte und Eigenschaften Sie haben, sollten Sie auch eine externe Datenspeichermethode wie SQL Server (MySQL, MSSQL oder was auch immer) in Betracht ziehen, die viele dieser Optimierungen für Sie erledigt.

Verwandte Themen