Heim >Java >javaLernprogramm >ArrayList to Array: Warum ist „toArray(new MyClass[0])' schneller als „toArray(new MyClass[myList.size()])'?

ArrayList to Array: Warum ist „toArray(new MyClass[0])' schneller als „toArray(new MyClass[myList.size()])'?

Linda Hamilton
Linda HamiltonOriginal
2024-12-02 09:50:10473Durchsuche

ArrayList to Array: Why is `toArray(new MyClass[0])` Faster Than `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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn