Heim >Java >javaLernprogramm >ArrayList to Array: Warum ist „toArray(new MyClass[0])' schneller als „toArray(new MyClass[myList.size()])'?
Das Array-Rätsel: .toArray(new MyClass[0]) vs. .toArray(new MyClass[myList.size()])
Beim Umgang mit ArrayLists kommt es häufig zu deren Konvertierung in Arrays. Dazu kann man eine dieser beiden Techniken anwenden:
// Option 1: Specify Array Size MyClass[] arr = myList.toArray(new MyClass[myList.size()]); // Option 2: Blank Array MyClass[] arr = myList.toArray(new MyClass[0]);
In Bezug auf die Leistung ergab sich ein unerwartetes Ergebnis: Auf Hotspot 8 übertrifft die Verwendung eines leeren Arrays überraschenderweise die vorab dimensionierte Version:
Benchmark (n) Mode Samples Score Error Units c.a.p.SO29378922.preSize 1 avgt 30 0.025 ▒ 0.001 us/op c.a.p.SO29378922.preSize 100 avgt 30 0.155 ▒ 0.004 us/op c.a.p.SO29378922.preSize 1000 avgt 30 1.512 ▒ 0.031 us/op c.a.p.SO29378922.preSize 5000 avgt 30 6.884 ▒ 0.130 us/op c.a.p.SO29378922.preSize 10000 avgt 30 13.147 ▒ 0.199 us/op c.a.p.SO29378922.preSize 100000 avgt 30 159.977 ▒ 5.292 us/op c.a.p.SO29378922.resize 1 avgt 30 0.019 ▒ 0.000 us/op c.a.p.SO29378922.resize 100 avgt 30 0.133 ▒ 0.003 us/op c.a.p.SO29378922.resize 1000 avgt 30 1.075 ▒ 0.022 us/op c.a.p.SO29378922.resize 5000 avgt 30 5.318 ▒ 0.121 us/op c.a.p.SO29378922.resize 10000 avgt 30 10.652 ▒ 0.227 us/op c.a.p.SO29378922.resize 100000 avgt 30 139.692 ▒ 8.957 us/op
Der JVM- und JIT-Compiler optimiert die Erstellung und Initialisierung neuer Arrays mit der richtigen Größe. Diese Optimierungen können jedoch nicht auf vom Benutzer erstellte Arrays angewendet werden. Daher kann die JVM durch die Verwendung eines leeren Arrays diese Optimierungen durchführen, was zu einer verbesserten Leistung führt.
Das obige ist der detaillierte Inhalt vonArrayList to Array: Warum ist „toArray(new MyClass[0])' schneller als „toArray(new MyClass[myList.size()])'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!