.toArray(yeni Sınıfım[0]).toArray(Sınıfım yeni[myList.() size])? | Netgez.com
SORU
6 EKÄ°M 2008, PAZARTESÄ°


.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
6 EKÄ°M 2008, PAZARTESÄ°


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.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Absolute Zero(Programming Tutorials)

    Absolute Zer

    22 Kasım 2012
  • Britec09

    Britec09

    4 Mart 2009
  • Matt Davis

    Matt Davis

    4 ÅžUBAT 2006