Es gibt mehrere Möglichkeiten, ein Element in einer Liste zu finden. Zum Beispiel habe ich eine Liste mit einigen Elementen, die eine eindeutige ID haben. Für eine gegebene ID möchte ich das spezifische Element aus der Liste zurückgeben.Welcher Code ist besser, um ein bestimmtes Element in einer Liste zu finden
Liste Beispiel (nur Schema, nicht die korrekte Syntax):
//Element(String id, int value)
List<Element> list = new ArrayList();
int elemCount = 1000000;
for(int i = 0; i<elemCount; i++)
list.add(new Element("id"+i, i));
Collections.shuffle(list);
Element e = getElement("id" + ThreadLocalRandom.current().nextInt(0, elemCount));
die folgenden zwei Verfahren gegeben, die besser nicht durchführt im Allgemeinen auf der Grundlage der Java-interne Implementierung und warum?
Erste Methode:
public Element getElement(String id) {
return list.stream()
.filter(e -> e.getId().equals(id))
.findAny()
.orElse(null);
}
Zweite Methode:
public Element getElement(String id) {
for(Element e : list)
if(e.getId().equals(id))
return e;
return null;
}
- "Element" als Objekt wird nur beispielsweise gewählt.
- Nicht relevant: Struktur und Größe des Elements, die PC-Leistung usw.
- Java Version: 1.8.0_111
Die erste, die mit Ihren Daten auf Ihrem Computer abgeschlossen wird, führt zu besseren Ergebnissen. Also versuche es herauszufinden. –
@MarkoTopolnik Wie Sie in den Beispielen sehen können, handelt es sich nicht um spezifische Daten. Alle Daten sollten dasselbe ausführen. Daher hoffe ich, eine allgemeine und gut erklärte Antwort zwei meiner Frage zu finden. – Spen
Was ist, wenn es auf Datengröße, Ihre JVM-Version, Ihre Anzahl von Kernen usw. ankommt? Sie haben die gleiche Groß-O-Komplexität, der Rest liegt an Details, die Sie nicht vorgeben können, existieren nicht. –