Lets klären zuerst, was wir reden: es
List<Map<String, String>>
gegen
List<Foo>
wo Foo Objekte eine Reihe von „Eigenschaften“ ist haben, die in einer Karte gespeichert werden würde (wie Schlüsselwertpaare) mit Option eins.
In diesem Fall gehen Sie absolut für die Option zwei. Einfach weil gute OOP über das Erstellen von Abstraktionen, auch bekannt als Modelle. Das heißt: Wenn Sie Attribute haben, die zusammen gehören, dann eine Klasse zu verwenden, um sie zu wickeln, ist der natürliche Weg zu gehen.
Das gibt Ihnen leichte Vorteile in Bezug auf die Leistung (weil Sie den Kartenzugriff vermeiden), aber das Wichtigste ist: es ermöglicht Ihnen, kompilieren Zeit checked code schreiben. Sie sehen:
int foo = list.get(0).map.get("key");
bei Laufzeit fehlschlagen kann - Sie wissen nicht, ob Karte den Schlüssel enthält, und wenn das eine ganze Zahl.
Aber
int foo = list.get(0).getFoo(); // resp. ...get(0).fieldName
kann vom Compiler überprüft werden! (Ja, diese get() Anrufe können noch während der Laufzeit nicht, aber das ist etwas, das Sie bekommen um nicht sowieso)
Darüber hinaus: nicht Sorge über die Leistung auf dieser Ebene: erstens, Sie müssen verstehen, was wirklich betrifft Ihre Leistung beim Schreiben von Java-Code. Weil Sie unbedingt vermeiden wollen, dass "dieser Code hässlich ist, aber vielleicht bessere Leistung bringt", schleichen sich Gedanken in Ihr Design ein. Konzentrieren Sie sich auf das Schreiben von sauberem Code, der die Arbeit auf unkomplizierte Weise erledigt. Do nie schreiben weniger ausdrucksvoll code, weil Sie davon ausgehen, es ist schneller. Wenn Sie ein Leistungsproblem haben - profilieren Sie Ihren Code, identifizieren Sie die Ursache und beheben Sie diese.
Aber lassen Sie keine vorzeitigen Optimierungsgedanken auf die Qualität Ihres Codes auswirken.
Warum wurde die Frage erneut geöffnet? Es ist immer noch meinungsbezogen. –
@MuratK. Man kann die objektiven (d. H. Nicht auf Meinungen basierenden) Unterschiede in Bezug auf Syntax und Leistung betrachten, wenn sie für verschiedene Szenarien verwendet werden. Aber das Ganze "welches ich verwenden soll" tendiert dazu, eine meinungsbasierte Best Practice zu sein und würde wahrscheinlich besser zu [softwareengineering.se] passen. Es scheint, als könnte es in beide Richtungen gehen. – Dukeling