java

2014-10-09 12 views
7

'de boşIteratörün kullanımı Java'da boş bir yineleyicinin gerçek zamanlı kullanımının ne olduğunu bana bilen var mı? Neden gerekli olduğunu merak ediyorum. gibi şeyjava

1. public static <T> Iterator<T> emptyIterator() 
2. public static <T> ListIterator<T> emptyListIterator() 
3. public static final <T> Set<T> emptySet(), etc.. 

kaynak: http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#emptyIterator()

+0

Maalesef linki asla geri soruma cevap vermez ya da ben cevabı anlayamadık olabilir. Birisi, hangi senaryoda ihtiyaç duyulduğunu açıklayabilir mi? – user3366706

+0

Soru şu cevabı veriyor: 'Ben bu durumda arayanlar için boş bir iterator dönmek istiyorum 'null' için test etmek zorunda değilsiniz :) –

+0

tamam teşekkürler :) bilmeden buna cevap verdim (http: // stackoverflow Yeni Bir Soru adına soru/cevap/821536/java-yineleyici-bir-boş-koleksiyon-bir-parametreli-tipi soru)! Yani bu soru, yinelenen bir cevap olarak etiketlenebilir. yinelenen bir soru olarak değil. Şaka yapıyorum, suçlama yok. – user3366706

cevap

7

Bunu uygulamak API boş sonuçla sonuçlanacak bir yineleyici satın mantığı gerektiren durumlarda kullanabilirsiniz. Yani bir boş döndürmek yerine boş bir yineleyici döndürürsünüz. Ayrıca, bazı belleği ve test amacıyla kaydetmek için kullanabilirsiniz. geri dönüşü olarak boş önlemek ve aynı zamanda bazı belleğe kaydeder

Örnek: Bir eleman eklenir kadar yukarıdaki sınıfta

class LazyObjectInitialization { 

    private Collection<String> items; 

    public final Iterator<String> items() { 

     if(items == null || items.isEmpty()) { 
     return Collections.emptyIterator(); 
     } 

     return items.iterator(); 
    } 

    public final add(String item) { 

     if(items == null) { 
     items = new ArrayList<>(); 
     } 

     items.add(item); 
    } 
} 

, daha sonra alan items intialized değildir. items() yönteminde beklenen davranışı sağlamak için boş bir yineleyici döndürüyoruz. Bundan fayda aşağıdaki gibidir:

  • Daha küçük bellek tüketimi: gerçekten ihtiyaç duyulduğunda
    • sınıf bellek ayrılamadı
    • bellek mutasyon
  • Daha küçük
    • biz nesneye şey eklemek kadar asla yeni yineleyici örneği oluşturmuyoruz.
  • Biz 'olası kopya' olarak belirtilen boş