Ich habe eine Liste von Objekten und die Liste ist sehr groß. Das Objekt ist
class Sample {
String value1;
String value2;
String value3;
String value4;
String value5;
}
Nun muss ich nach einem bestimmten Wert eines Objekts in der Liste suchen. Sagen wir, wenn wert3=='drei'
muss ich diese Objekte zurückgeben (Meine Suche basiert nicht immer auf wert3)
Die Liste ist
List<Sample> list = new ArrayList<Sample>();
Wie kann ich das effizient machen?
Danke!
Wenn Sie immer auf der Grundlage von "Wert3" suchen, können Sie die Objekte in einer Map speichern:
Map<String, List<Sample>> map = new HashMap <>();
Sie können dann die Map mit "Schlüssel = Wert3" und "Wert" = Liste von Beispielobjekten mit der gleichen "Wert3"-Eigenschaft auffüllen.
Anschließend können Sie die Karte abfragen:
List<Sample> allSamplesWhereValue3IsDog = map.get("Dog");
Hinweis: Wenn keine 2 Sample
-Instanzen den gleichen value3
haben können, können Sie einfach eine Map<String, Sample>
verwenden.
Ich modifiziere diese Liste und füge eine Liste zu den Beispielen hinzu, indem ich folgendes versuche
Pseudocode
Sample {
List<String> values;
List<String> getList() {
return values}
}
for(Sample s : list) {
if(s.getString.getList.contains("three") {
return s;
}
}
Da Ihre Liste eine ArrayList
ist, kann davon ausgegangen werden, dass sie unsortiert ist. Daher gibt es keine Möglichkeit, Ihr Element schneller als O(n) zu suchen.
Wenn Sie können, sollten Sie darüber nachdenken, Ihre Liste in ein Set
(mit HashSet
als Implementierung) mit einem spezifischen Comparator
für Ihre Beispielklasse zu ändern.
Eine andere Möglichkeit wäre die Verwendung einer HashMap
. Sie können Ihre Daten als Sample
hinzufügen (Klassennamen bitte mit einem Großbuchstaben beginnen) und die Zeichenfolge, nach der Sie suchen wollen, als Schlüssel verwenden. Dann könnten Sie einfach verwenden
Sample samp = myMap.get(myKey);
Wenn es mehrere Stichproben pro Schlüssel geben kann, verwenden Sie Map<String, List<Sample>>
, ansonsten verwenden Sie Map<String, Sample>
. Wenn Sie mehrere Schlüssel verwenden, müssen Sie mehrere Maps erstellen, die denselben Datensatz enthalten. Da sie alle auf dieselben Objekte zeigen, sollte der Platz kein großes Problem darstellen.