SORU
10 Aralık 2009, PERŞEMBE


Java için döngü vs Yineleyici/dosyalarda grup geleneksel performans

Herhangi bir performans sonuçlarını döngü için geleneksel karşılaştırıldığında mevcut test vs bir ArrayList,HashMap ve diğer koleksiyonları geçme sırasında Yineleyici var mı?

Ya da sadece neden Yineleyici döngü ya da tam tersi kullanmalıyım?

CEVAP
10 Aralık 2009, PERŞEMBE


Bu mesajın ne olduğunu varsayarsak:

// traditional for loop
for (int i = 0; i < collection.size(); i  ) {
  T obj = collection.get(i);
  // snip
}

// using iterator
Iterator<T> iter = collection.iterator();
while (iter.hasNext()) {
  T obj = iter.next();
  // snip
}

// using iterator internally (confirm it yourself using javap -c)
for (T obj : collection) {
   // snip
}

Yineleyici hayır rasgele erişimli koleksiyonları (örneğin, TreeSet, HashMap, LinkedList) için daha hızlıdır. Diziler ve ArrayLists için, performans farkları yok denecek kadar azdır.

Edit: mikro kıyaslama kök çok fazla kötülük, sadece erken optimizasyonu gibi olduğuna inanıyorum. Ama sonra tekrar, iyi böyle oldukça önemsiz şeyler için getirmek için bir duygu var bence. Dolayısıyla a small test koştum:

  • bir LinkedList ve ArrayList respecively üzerinde yineleme
  • 100,000 "" dizeleri . rastgele
  • onların uzunluğu (derleyici önlemek için bu şeyi bütün döngü en iyi duruma getirir) toplamak
  • 3 döngü stilleri (her biri için, sayaç ile yineleyici) kullanarak

Sonuçlar herkes için benzer ama "" LinkedList ile. sayaç ile Tüm diğer beş az 20 tüm liste üzerinde yineleme mili saniye sürdü. list.get(i) LinkedList 100,000 kez aldı 2 dakikadan fazla (!) kullanarak tam (60,000 kat daha yavaş). Vay be! :) Bu yüzden en iyisi, özellikle eğer liste ile ilgili ne varsa. bir yineleyici (açıkça veya örtülü olarak her kullanarak) kullanmak için.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3biblecom

    3biblecom

    23 NİSAN 2011
  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011