Numaralandırma ve yineleyici arasındaki fark

Anonim

Numaralandırma ve İteratör

Collections Framework (yani HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap ve LinkedHashSet). Java'daki nesnelerin tek tek öğeleri aracılığıyla yinelenmenin sayısız yolu vardır. Java, bu görevi kolaylaştırmak için iki arabirim sağlar. Numaralandırma ve yineleyici java'de bulunan arabirimlerin ikisidir. util paketi, dizi veya nesne vasıtasıyla bir dizi öğe ile numaralandırılacak işlevselliği sağlar. Numaralandırıcı, JDK 1. 0'da tanıtıldı ve JDK 1. 2'de tanıtılan yineleyici, Numaralandırıcının işlevselliğini çoğalttı (Koleksiyon Çerçevesi içinde).

Numaralandırma Nedir?

Numaralandırma, Java öğelerindeki sekanslar vasıtasıyla numaralandırma olanağı sağlayan JDK 1. 0'da tanıtılan, genel bir arayüzdür. Java altında bulunur. util paketi. 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çerdiğini test eder ve nextElement öğesi dizideki sonraki öğeyi döndürür (eğer gitmek için en az bir tane daha varsa). Diğer bir deyişle, nextElement () öğesini art arda çağırarak, programlayıcı serideki bağımsız öğelere erişebilir. Örneğin, Vektör v1'deki tüm öğeleri Numaralandırıcı kullanarak yazdırmak için aşağıdaki kod pasajı kullanılabilir.

Numaralandırma e = v1. elementler();

iken (Örn.MoreLements ()) {

Sistemi. dışarı. println (e. nextElement ());

}

Numaralandırıcı SequenceInputStream nesnelerine girdi akışını tanımlamak için de kullanılabilir.

İteratör Nedir?

Iterator, Java'daki genel bir arabirimdir. util paketini kullanarak, Collections çerçevesini (ArrayList, LinkedList, vb.) uygulayan koleksiyon nesnelerinin öğeleri arasında yinelenmesini sağlar. Bu, JDK 1. 2'de tanıtıldı ve Numaralandırıcıyı Java Collections Framework'te değiştirdi. İteratörün üç yöntemi vardır. HasNext () yöntemi, koleksiyonda kalan öğeler olup olmadığını test eder ve sonraki () yöntemi serideki bir sonraki öğeyi döndürür. Remove () yöntemi, alttaki koleksiyonun geçerli öğesini kaldırmak için kullanılabilir. Örneğin, Vektör v1'deki tüm öğeleri iterleyici kullanarak basmak için aşağıdaki kod parçası kullanılabilir.

İteratör i = v1. elementler();

While (i. HasNext ()) {

Sistemi. dışarı. println (e. next ());

}

Numaralandırma ve Yineleyici arasındaki fark nedir?

Her ne kadar, numaralandırma ve yineleyici java'de bulunan arayüzlerden ikisidir.Bir serinin elemanları aracılığıyla yinelemesini / numaralandırılmasını sağlayan util paketi farklılıklarına sahiptir. Aslında, Numaralandırma'tan sonra tanıtılan Iterator, Java Collections çerçevesindeki Numaralamayı değiştirir. Listelemenin aksine, yineleyici başarısız olur. Bu, yineleyici kullanıldığında eşzamanlı değişikliklerin (temel alınan koleksiyona) izin verilmemesi anlamına gelir. Bu, eşzamanlı değişiklikler yapma riski bulunan çok iş parçacıklı ortamlarda çok yararlıdır. Eşzamanlı bir değişiklik olması durumunda, Iterator nesnesi bir ConcurrentModificationException atar. Yineleyicinin Numaralandırıcıyla karşılaştırıldığında daha kısa yöntem adları vardır. Ayrıca yineleyici, yineleme sırasında öğeleri silmenin ek işlevselliğine sahiptir (bu da Enumerator kullanılarak mümkün değildir). Dolayısıyla, öğelerden topluluktan çıkarılmasına ihtiyaç duyulursa, kabul edilebilir tek seçenek Iterator'dır.