.toArray(yeni Sınıfım[0]).toArray(Sınıfım yeni[myList.() size])?
Ben varsayarak bir ArrayList
ArrayList<MyClass> myList;
Ve toArray aramak istiyorum, orada kullanmak için bir performans nedeni budur
MyClass[] arr = myList.toArray(new MyClass[myList.size()]);
üzerinde
MyClass[] arr = myList.toArray(new MyClass[0]);
?
Daha az ayrıntılı ve derleyici boş dizi gerçekten oluşturulan almaz emin olun kabul beri ikinci tarzı tercih ederim, ama eğer bu doğruysa merak ediyorum.
Tabii ki, ™'u bu durumda hiçbir ÅŸey farketmez öyle ya da böyle, ama isterim tutmak tutarlı bir stil arasında benim normal kod ve benim optimize edilmiÅŸ iç döngüler...
CEVAP
ArrayList in Java 5, dizi gibi zaten eğer doğru boyutu (veya daha büyük) varsa doldurulacaktır. Sonuç olarak
MyClass[] arr = myList.toArray(new MyClass[myList.size()]);
bir dizi nesnesi oluşturmak, doldurup geri dönecektir "" arr Diğer taraftan
MyClass[] arr = myList.toArray(new MyClass[0]);
iki dizi oluşturur. İkincisi uzunluğu 0 ile Sınıfım dizisidir. Hemen atılır bir nesne için bir nesne oluşturma var. Kaynak kodu da anlaşılacağı kadarıyla TAM zamanında olamaz / derleyici yaratılmış değildir, bu bir optimize. Ayrıca, döküm-uzunluğu sıfır nesne sonuçları(ler) kullanarak toArray() - yöntem.
ArrayList kaynak bakın.() toArray:
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
Yalnızca bir nesne oluşturulur, ilk yöntem () ama yine de örtülü pahalı döküm kaçının.
Hareket Gıt ile yeni bir şube için en ...
Uzak bir Git repo için yeni bir yerel ...
Hareket mevcut, uncommited Git yeni bi...
Nasıl yeni bir Git deposuna tarihi ile...
Nasıl bir karakter yerine Vim bir yeni...