Sayım ve Yineleyici
Java'da Vektörler, Hash tabloları ve Java Collections Framework'ü uygulayan sınıflar (yani HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap ve LinkedHashSet) gibi koleksiyonlar olarak çalışan birçok veri yapısı vardır. Java'daki nesnelerin tek tek öğeleri aracılığıyla yineleme yapmanın birçok yolu vardır. Java, bu görevi kolaylaştırmak için iki arabirim sağlar. Numaralandırma ve Yineleyici, bir dizi öğeye sahip diziler veya nesneler arasında numaralandırma işlevi sağlayan java.util paketinde bulunan arabirimlerden ikisidir. Enumerator JDK 1.0'da tanıtıldı ve JDK 1.2'de tanıtılan Iterator, Enumerator'ın işlevselliğini sanal olarak çoğaltır (Koleksiyonlar Çerçevesi içinde).
Numaralandırma Nedir?
Numaralandırma, Java'da JDK 1.0'da tanıtılan ve öğelerin dizileriyle numaralandırma yeteneği sağlayan genel bir arabirimdir. Java.util paketinin altında bulunur. Numaralandırma arabirimi bir nesne tarafından uygulandığında, bu nesne bir dizi öğe oluşturabilir. Numaralandırma arabiriminin iki yöntemi vardır. HasMoreElements () yöntemi, bu numaralandırmanın daha fazla öğe içerip içermediğini test eder ve nextElement (), dizideki bir sonraki öğeyi döndürür (en az bir tane daha varsa). Başka bir deyişle, nextElement () işlevini art arda çağırarak, programcı serideki tek tek öğelere erişebilir. Örneğin, Enumerator kullanarak Vector v1'deki tüm öğeleri yazdırmak için aşağıdaki kod snippet'i kullanılabilir.
Numaralandırma e = v1.elements ();
İken (e.hasMoreLements ())
System.out.println (e.nextElement ());
Numaralandırıcı, SequenceInputStream nesnelerine giriş akışını tanımlamak için de kullanılabilir.
Yineleyici nedir?
Iterator, Java.util paketinde, Koleksiyonlar çerçevesini uygulayan koleksiyon nesnelerinin (ArrayList, LinkedList, vb.) Öğelerini yinelemeye izin veren genel bir arabirimdir. Bu, JDK 1.2'de tanıtıldı ve Java Koleksiyonlar Çerçevesi'ndeki Numaralandırıcı'nın yerini aldı. Yineleyicinin üç yöntemi vardır. HasNext () yöntemi koleksiyonda kalan öğelerin olup olmadığını test eder ve next () yöntemi serideki sonraki öğeyi döndürür. Remove () yöntemi, geçerli öğeyi temel alınan koleksiyondan kaldırmak için kullanılabilir. Örneğin, Vector v1'deki tüm öğeleri Iterator kullanarak yazdırmak için aşağıdaki kod snippet'i kullanılabilir.
Yineleyici i = v1.elements ();
İken (i.hasNext ())
System.out.println (e.next ());
Enumeration ve Iterator arasındaki fark nedir?
Numaralandırma ve Yineleyici java.util paketinde bulunan ve bir serinin öğeleri aracılığıyla yineleme / numaralandırma yapılmasına izin veren arabirimlerden ikisi olmasına rağmen, farklılıkları vardır. Aslında, Numaralandırma'dan sonra tanıtılan Iterator, Java Koleksiyonları çerçevesi içindeki Numaralandırmanın yerini alır. Numaralandırma'dan farklı olarak, Yineleyici arıza korumalıdır. Bu, Yineleyici kullanıldığında eşzamanlı değişikliklere (temel alınan koleksiyonda) izin verilmediği anlamına gelir. Bu, her zaman aynı anda değişiklik riski bulunan çok iş parçacıklı ortamlarda çok kullanışlıdır. Eşzamanlı bir değişiklik durumunda, Iterator nesnesi bir ConcurrentModificationException kurar. Yineleyici, Numaralandırıcıya göre daha kısa yöntem adlarına sahiptir. Ayrıca, yineleyici, yineleme sırasında (Enumerator kullanılarak mümkün değildir) öğeleri silme ek işlevine sahiptir. Dolayısıyla, öğeleri koleksiyondan kaldırmaya ihtiyaç duyulursa, Iterator düşünülebilecek tek seçenektir.