পাল্টা, হটস্পট 8-তে দ্রুততম সংস্করণটি হ'ল:
MyClass[] arr = myList.toArray(new MyClass[0]);
আমি jmh ব্যবহার করে একটি মাইক্রো বেঞ্চমার্ক চালিয়েছি ফলাফল এবং কোড নীচে রয়েছে, খালি অ্যারে সহ সংস্করণ ধারাবাহিকভাবে একটি প্রেসযুক্ত অ্যারে সহ সংস্করণকে ছাপিয়ে দেখায়। মনে রাখবেন যে আপনি যদি সঠিক আকারের বিদ্যমান অ্যারেটি পুনরায় ব্যবহার করতে পারেন তবে ফলাফলটি ভিন্ন হতে পারে।
বেঞ্চমার্ক ফলাফল (মাইক্রোসেকেন্ডে স্কোর, আরও ছোট = আরও ভাল):
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
রেফারেন্সের জন্য, কোড:
@State(Scope.Thread)
@BenchmarkMode(Mode.AverageTime)
public class SO29378922 {
@Param({"1", "100", "1000", "5000", "10000", "100000"}) int n;
private final List<Integer> list = new ArrayList<>();
@Setup public void populateList() {
for (int i = 0; i < n; i++) list.add(0);
}
@Benchmark public Integer[] preSize() {
return list.toArray(new Integer[n]);
}
@Benchmark public Integer[] resize() {
return list.toArray(new Integer[0]);
}
}
আপনি পূর্ববর্তীদের উইজডম অফ অ্যারেগুলি ব্লগ পোস্টে অনুরূপ ফলাফল, সম্পূর্ণ বিশ্লেষণ এবং আলোচনার সন্ধান করতে পারেন । সংক্ষিপ্তসার হিসাবে: জেভিএম এবং জেআইটি সংকলকটিতে বেশ কয়েকটি অপ্টিমাইজেশন রয়েছে যা এটি সস্তাভাবে একটি নতুন সঠিক আকারের অ্যারে তৈরি করতে এবং প্রারম্ভিক করতে সক্ষম করে এবং যদি আপনি নিজে অ্যারে তৈরি করেন তবে সেই অপ্টিমাইজেশন ব্যবহার করা যাবে না।