Teka-teki Array: .toArray(MyClass baharu[0]) vs .toArray(MyClass baharu[myList.size()])
Apabila berurusan dengan ArrayLists, menukarnya kepada tatasusunan sering timbul. Untuk berbuat demikian, seseorang boleh menggunakan salah satu daripada dua teknik ini:
// Option 1: Specify Array Size MyClass[] arr = myList.toArray(new MyClass[myList.size()]); // Option 2: Blank Array MyClass[] arr = myList.toArray(new MyClass[0]);
Dari segi prestasi, penemuan yang tidak dijangka telah muncul: pada Hotspot 8, menggunakan tatasusunan kosong secara mengejutkan mengatasi versi prasaiz:
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
Pengkompil JVM dan JIT mengoptimumkan penciptaan dan permulaan tatasusunan baharu bersaiz betul. Walau bagaimanapun, pengoptimuman ini tidak boleh digunakan pada tatasusunan yang dibuat pengguna. Oleh itu, menggunakan tatasusunan kosong membolehkan JVM melakukan pengoptimuman ini, menghasilkan prestasi yang lebih baik.
Atas ialah kandungan terperinci ArrayList to Array: Mengapakah `toArray(New MyClass[0])` Lebih Cepat Daripada `toArray(new MyClass[myList.size()])`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!