Ich möchte etwas klarstellen: Bei Verwendung einer Arraylist beginnt es mit einer Größe von 10 Elementen. Wenn es automatisch erhöht werden muss, schreibt es die gesamte ArrayList um 2/3 größer.
Wenn ich mir eine Liste mit der Größe 50-120 ansehe, ist es besser:
Danke
Wenn Sie die voraussichtliche Größe von ArrayList
kennen, ist es am besten, sie im Voraus anzugeben:
Dies erspart Ihnen die Auswirkungen auf die Leistung, wenn ArrayList
das zum Speichern des Inhalts verwendete Array neu zugewiesen hat (obwohl dies für die von Ihnen angegebene Arraygröße vernachlässigbar ist).
Es ist weniger rechenintensiv, es in etwa so groß zu machen, wie Sie es auf Anhieb brauchen, aber die Wahrheit ist, dass Java sehr effizient ist, so dass es wirklich nicht nötig ist, sich darüber Gedanken zu machen, wie die Arraylist erhöht wird. Wenn Sie jedoch maximale Effizienz anstreben, ist die Zuordnung des Speichers beim Erstellen der Liste besser.
schreibt die gesamte ArrayList um 2/3 größer
Nein. Es macht das Array doppelt so groß (obwohl der genaue Faktor ein undokumentiertes Implementierungsdetail ist). Ich stehe richtig.
Wenn ich mir eine Liste anschaue, die eventuell die Größe 50-120 hat, ist es besser: 1. erzeuge Größe 150 direkt aus
Warum 150? Warum nicht 120?
- erlaubt die Liste einige Male automatisch zu erhöhen?
In so einem kleinen Bereich würde ich sofort die große Größe verwenden. Wenn der Bereich viel größer ist (z. B. 50-50000), würde ich die kleinste Größe (oder vielleicht eine Zwischengröße, abhängig von der erwarteten Werteverteilung) reservieren und sie einige Male skalieren lassen.
Solange Sie nicht planen, Millionen dieser Listen zu erstellen, ist es eigentlich egal. Das Kopieren von Array-Daten ist ziemlich schnell und die Vergrößerung auf 50-120 Elemente ist mit einem Profiler nicht messbar. Wenn Sie jedoch wissen, dass die Liste endlich diese Größe haben wird, würde ich empfehlen, diese Informationen beim Erstellen der Liste zu verwenden.
Sie können auch eine nette Methode aus Guava verwenden Lists.newArrayListWithExpectedSize .
Hier ist das Javadoc
Erstellt eine ArrayList-Instanz, die so dimensioniert ist, dass sie eine geschätzte Anzahl von Elementen ohne Größenänderung enthält. Wenn die Schätzung niedrig ist, wird eine kleine Menge Padding hinzugefügt.