MERHABA! Bugünkü dersimizde Java Iterator hakkında konuşacağız. Kütüphaneye gittiğinizi ve belirli bir kitabı bulmak istediğinizi hayal edin. Bunu nasıl yapıyorsun? Kurgu değilse, Dewey Ondalık Sistemi var. Kurgu ise, soyadlarına göre alfabetik olarak sıralanırlar. Aradığınız her ne ise, bir noktada, aradığınızı bulana kadar kitapları teker teker gözden geçirmeniz gerekir. İster bir Array , ister bir ArrayList , bir Queue veya bir List içinde depolanmış olsun, Java'da bir şeyler koleksiyonunuz olduğunda , belirli bir değeri nasıl bulursunuz? Bir noktada, her öğeden birer birer geçmeniz gerekir. Java yineleyici bunun içindir.Java Yineleyici Nasıl Kullanılır: Kısa Bir Öğretici - 1

Java'da Yineleyici Nedir?

Java'da yineleyici nedir? Bir koleksiyondaki her öğeye bakmanın bir yoludur. Toplama derken, Koleksiyon sınıfındaki her şeyi kastediyoruz . Bu içerir:
  • Dizi Listesi
  • HashSet
  • LinkedHashSet
  • Bağlantılı liste
  • Öncelik Sırası
  • Vektör
  • Ve bircok digerleri…
Ayrıca , birkaç isim vermek gerekirse , bu sınıflar için Set , List , Queue , Dequeue ve Sorted Set gibi çeşitli arabirimleri içerir . Iterator<E>, Interface Iterator<E> sınıfının genel arabirim yöntemidir . Java 1.2'de ortaya çıktı ve bir koleksiyondaki sıralı öğeleri incelemenin bir yolu olarak Numaralandırmanın yerini aldı.

Neden For Loops'u Java'da Yineleyici Olarak Kullanmamalısınız?

Herkese Java'da bir koleksiyon aracılığıyla yineleme yapmanın öğretildiği ilk yollardan biri for döngüsüdür. Şuna benziyor:

class Main {
  public static void main(String[] args) {
    int exampleArray[] = new int[10];

    //fill array with data

    for(int x = 0; x < exampleArray.length; x++) {
      System.out.println("Content of element " + x + "is: " + exampleArray[x]);
    }
  }
}
Çıktı şu şekilde bir liste olacaktır:

Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Bunun kullanımları var, ancak koleksiyon öğeleri dizin tabanlı bir sistemde depolamazsa ne olur? Örneğin, Set lerin normalde sırası yoktur. Bu nedenle, Java'da bir yineleyici olarak bir for döngüsü kullanma pratiğinden çıkıp bunun yerine Iterator<E> sınıfını kullanarak pratik yapmanız önerilir. İşte bazı Java yineleyici örnekleri.

Java'da Yineleyici nasıl kullanılır?

İşte Java'da yineleyicinin nasıl kullanılacağına dair bazı örnekler. Yineleyici sınıfını kullanırken, bir koleksiyonda gezinmenin üç yolu vardır. Bir while() döngüsü, bir for() döngüsü ve bir forEach() döngüsü kullanabilirsiniz . Bu for döngüsünün daha önce bahsettiğimizden farklı olduğunu unutmayın. İşte üç farklı Java yineleyici örneği. İlk olarak, yineleme yapmak için Koleksiyonu ayarlayalım .

import java.util.*; // imports ArrayList, Collection and Iterator

class Main {
  public static void main(String[] args) {
    Collection<String> example = new ArrayList<String>();

    example.add("Item 1");
    example.add("Item 2");
    example.add("Item 3");
    example.add("Item 4");
  }
}
Bu, dört öğe yüklediğimiz bir ArrayList'ten oluşan basit bir Koleksiyondur . Şimdi ArrayList üzerinde gezinmek için Iterator sınıfını kullanmanın üç yöntemine bakalım .

Döngü sırasında


Iterator<String> iterator = example.iterator();

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
Bu while() döngüsü , gelecekte bir öğe olup olmadığını kontrol etmek için Iterator sınıfının .hasNext() Boolean yöntemini kullanır . Önkoşul doğruysa, devam eder. Yanlış olarak dönerse, döngü sona erer. Buradaki anahtar kısım, .hasNext() ve .next() yöntemlerinin her ikisinin de ilk öğenin ilk kontrolünü yapmasıdır. Koleksiyon boşsa ve ilk öğe yoksa, yöntem .hasNext() için false döndürür ve .next ( ) yöntemi için bir NoSuchElementException atar .

Döngü için


for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
Bu daha geleneksel bir for döngüsü gibi görünüyor. Durum kontrolü ve değişiklik kısmı olarak .hasNext() yöntemini kullanır . Başlatma, yineleyiciye yapılan çağrıdır.

İçin: Her döngü


for (String s : example) {
  System.out.println("Element Value= " + s);
}
For :Each döngüsü bir for döngüsüdür, ancak nasıl okuyacağınızı bilmiyorsanız biraz kafa karıştırıcı olabilir. Bir For:Each döngüsünün sözdizimi for (data_type değişkenAdı : koleksiyonAdı){ body} şeklindedir . Bu for:each döngüsünün birkaç dezavantajı vardır. İlk olarak, koleksiyonu yalnızca bir yönde kat edebilir. İkinci olarak, her öğeyi yinelemeniz gerekir. Hiçbirini atlayamazsın. Ancak Java'da uygun bir liste yineleyici olarak en iyi seçenektir. Artı tarafta, for:each döngüsünün okunması çok kolaydır ve bir kez öğrendikten sonra yanılmanız zordur. Üç yineleyici döngüsünün çıktısının ne olduğunu merak ediyorsanız, hepsi aynıdır:

Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4 

Haritalar İçin Java'da Yineleyici nasıl kullanılır?

Haritalar, verileri depolamanın popüler bir yoludur, ancak Collection öğesini genişletmedikleri için , önceki yineleyicileri doğrudan bir haritada gezinmek için kullanamazsınız. Peki Map s ve HashMap s üzerinden geçmek için Java'da bir yineleyiciyi nasıl kullanırsınız ? Dört iyi Java harita yineleme yöntemi vardır. Bunları tek tek ele alacağız. İlk olarak, bir dizi değer içeren bir harita yükleyelim.

import java.util.*; //imports Map and HashMap

class Main {
  public static void main(String[] args) {
    Map<String, String> example = new HashMap<String, String>();

    example.put("alpha", "one");
    example.put("beta", "two");
    example.put("gamma", "three");

  }
}

Java Hashmap Yineleyici Yöntemi: forEach(action)


example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Bu yöntem, yineleme yapmak için bir lambda ifadesi kullanır. Lambda operatörü forEach() yöntemidir ve gövde değerleri yazdırır. Bu, çoklu parametre işleci kullanır. Bu, Java 8'deki harita yineleyici için en hızlı ve en temiz yöntemdir.

Java Hashmap Yineleyici Yöntemi: For:Each() Döngüsü


for (Map.Entry<String, String> iterate : example.entrySet()) {
  System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Bu, öğeleri olarak anahtar ve değere sahip bir küme döndürmek üzere entrySet() yöntemini çağırmak için For:Each sözdizimini kullanır. Ek olarak, .Entry() yöntemi kullanılırken , nesneler yalnızca bu yineleme gerçekleşirken doğrudur.

Java Hashmap Yineleyici Yöntemi: Map.Entry<k, v>


Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();

while(iterator.hasNext()){
  Map.Entry<String, String> element = iterator.next();
  System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
Bu yöntem, Koleksiyon Yineleyicisini ve yöntemlerini kullanmak için Haritayı yeniden bir kümeye dönüştürür . Bu üç yineleyici yöntemi için dönüş şöyle görünür:

Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
  System.out.println("Key: " + key);
}
for (String value : example.values()) {
  System.out.println("Value: " + value);
}
Bu, öğeleri farklı bir şekilde döndürür. Önce sırayla tüm Anahtarları ve ardından tüm Değerleri döndürür:

Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three