Iterators in Java

Java’da yineleyiciler (iteratos), bir veri koleksiyonunun öğelerine erişmenin ve bunları işlemenin bir yolunu sağlar. Bunlar, farklı veri toplama türleriyle birleşik bir çalışma yöntemi sağlayan bir grup sınıf ve arabirim içeren Java Collection Framework’ün parçasıdır. Yineleyiciler, diğer koleksiyonların yanı sıra listeler, kümeler, haritalar ve dizilerle yaygın olarak kullanılır.

Bir koleksiyon nesnesinde iterator() yöntemi çağrılarak bir yineleyici oluşturulur. Bu yöntem, üç ana yöntem sağlayan Iterator arabiriminin bir örneğini döndürür: hasNext(), next() ve remove(). hasNext() yöntemi, koleksiyonda işlenecek daha fazla öğe olup olmadığını gösteren bir boole değeri döndürür. next() yöntemi, koleksiyondaki sonraki öğeyi döndürür ve yineleyiciyi sonraki öğeye ilerletir. remove() yöntemi, next() yöntemi tarafından döndürülen son öğeyi koleksiyondan kaldırır.

Yineleyicileri kullanmanın en yaygın yolu bir süre döngüsündedir. Bu durumda, hasNext() yöntemi kullanılarak döngü koşulu kontrol edilir ve sonraki öğeye next() yöntemi kullanılarak erişilir ve işlenir. Örneğin:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

Iterator<Integer> iterator = numbers.iterator();

while (iterator.hasNext()) {

int number = iterator.next();

System.out.println(number);

}

Yineleyicileri kullanmanın başka bir yolu, Java 5’te tanıtılan for-each döngüsüdür. Bu döngü türü, geliştiricilerin açıkça bir yineleyici oluşturmak zorunda kalmadan bir koleksiyonda gezinmesine olanak tanır. Örneğin:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

for (int number : numbers) {

System.out.println(number);

}

Yineleyici koleksiyonun sonuna ulaştığında, hasNext() yöntemi false döndürür ve next() yöntemi çağrılırsa bir NoSuchElementException atar. Ayrıca, remove() yöntemi yalnızca next() yöntemi çağrıldıktan sonra çağrılabilir. remove() yöntemi next() yönteminden önce çağrılırsa, bir IllegalStateException atılır.

Iterator arayüzüne ek olarak, özellikle List arayüzünü uygulayan koleksiyonlar için kullanılan bir ListIterator arayüzü de vardır. Bu arabirim, geliştiricilerin bir listeyi hem ileri hem de geri yönde hareket ettirmelerine izin veren önceki() ve hasPrevious() gibi ek yöntemler sağlar. Ayrıca listeye öğe eklemek ve ayarlamak için add() ve set() gibi yöntemler sağlar.

Yineleyicilerin genellikle yineleme işlemi sırasında değişecek olan koleksiyonlarla kullanıldığını not etmek önemlidir. Bunun nedeni, yineleyicinin remove() yöntemi koleksiyonda gezinirken çağrılırsa, mevcut öğeyi koleksiyondan kaldıracaktır. Koleksiyon değişmeyecekse, daha basit ve anlaşılır olduğu için bunun yerine for-each döngüsünü kullanmak daha iyidir.

Sonuç olarak yineleyiciler, Java’daki bir koleksiyonun öğelerine erişmek ve bunları işlemek için esnek ve uygun bir yol sağlar. Geliştiriciler yineleyicileri kullanarak bir koleksiyonda kolayca gezinebilir ve her öğe üzerinde gerektiği gibi işlemler gerçekleştirebilir. Iterator ve ListIterator arabirimleriyle Java, koleksiyonlarla çalışmak için sağlam ve çok yönlü bir çerçeve sağlar.

İbrahim Ebrar AKÇAKOYUN