Iterator di Java: Panduan Lengkap – Codewithaden

Setiap koleksi menyediakan iterator, yang memungkinkan programmer Java untuk mengakses elemen koleksi apa pun menggunakan metode yang ditentukan dalam Iterator antarmuka

Iterator di Java

Iterator di Java dapat dianggap sebagai cara umum dan standar mengakses elemen koleksi dengan cara yang sama seseorang menggunakan variabel, katakanlah saya, untuk mengulangi melalui array menggunakan a untuk loop . Jawa Iterator antarmuka terkait erat dengan Koleksi Java Kerangka. Itu datang sebagai bagian dari Java.util kemasan.

Beberapa utilitas yang umumnya terkait dengan iterator adalah pengambilan, akses, penyisipan, atau penghapusan elemen yang terkait dengan koleksi apa pun. Iterator di Java tidak terbatas pada Iterator antarmuka. Namun, antarmuka di Java sangat penting.

Ada tiga jenis iterator yang tersedia di Java.

  1. Iterator
  2. Daftar
  3. Enumerasi

Kami akan membahas setiap jenis iterator di Java satu per satu.

Iterator

Seperti dibahas sebelumnya, Iterator Antarmuka menyediakan metode untuk setiap koleksi yang dapat digunakan untuk mengakses elemen koleksi itu. Elemen dapat dimasukkan, dihapus, diakses, atau diambil menggunakan metode tersebut. Itu Iterator Antarmuka adalah bagian dari Java.util Paket sebagai berikut:

public interface java.util.Iterator {
  public abstract boolean hasNext();
  public abstract E next();
  public void remove();
  public void forEachRemaining(java.util.function.Consumer);
} 

Metode berikut adalah bagian dari Iterator Antarmuka:

boolean hasnext ()

Kembali BENAR Jika lebih banyak elemen hadir dalam koleksi yang tersisa untuk dilalui. Kalau tidak, ia kembali Salah .

Sintaks: public abstrak boolean hasnext ()

Objek selanjutnya ()

Mengembalikan elemen berikutnya ke elemen yang ditunjukkan oleh iterator saat ini. Melempar NosuchelementException Ketika tidak ada elemen seperti itu yang dapat diambil dengan cara ini.

Sintaks: objek abstrak publik berikutnya ()

void rape ()

Menghapus elemen terakhir yang akan diambil oleh Berikutnya( ) metode. Melempar IlegalstateException jika menghapus( ) disebut sebelumnya Berikutnya( ) . Melempar UnsupportedOperationException Kapan menghapus() tidak didukung.

Sintaks: public void remead ()

void foreachremaining (konsumen Tindakan)

Melakukan tindakan yang ditentukan pada setiap elemen yang tersisa dalam koleksi.

Sintaks: public void foreachremaining (konsumen Tindakan)

Lihat contoh kode berikut.

import java.util.LinkedList;
import java.util.Iterator;

class Example1
{
  public static void main(String [] args)
  {
    //creating a LinkedList and adding elements it in
    LinkedList list=new LinkedList<>();
    list.add("Agra");
    list.add("Agartala");
    list.add("Mumbai");
    list.add("Amethi");
    list.add("Jhansi");

    //creating an Iterator to traverse LinkedList
    Iterator cursor=list.iterator();

    //print all the city names where names start A and remove the others from the LinkedList
    System.out.println("Cities starting with alphabet A in the list are: ");

    while(cursor.hasNext()==true)
      String o=(String)cursor.next();
        System.out.println(o);
      else
        cursor.remove();
    }
  }
} 

Lihat output berikut.

Iterators

Daftar

Sementara iterator dari Iterator Antarmuka memungkinkan programmer Java untuk bepergian hanya dalam satu arah, orang mungkin merasakan kebutuhan untuk traversal dua arah dalam struktur data tertentu.

Untuk koleksi seperti daftar (an Daftar Array , misalnya), Java menyediakan antarmuka iterator tertentu yang disebut Daftar .

Itu Daftar antarmuka adalah bagian dari paket java.util dan mengimplementasikan Iterator antarmuka itu sendiri. Definisi umum dari Daftar Antarmuka di Java adalah sebagai berikut:

public interface java.util.ListIterator extends java.util.Iterator {

  public abstract boolean hasNext();

  public abstract E next();

  public abstract boolean hasPrevious();

  public abstract E previous();

  public abstract int nextIndex();

  public abstract int previousIndex();

  public abstract void remove();

  public abstract void set(E);

  public abstract void add(E);

} 

Lihat diagram berikut.

Java

Untuk menggunakan a Daftar objek, metode Berikutnya() dan sebelumnya() Lihat dua elemen di mana poin iterator ini. Ini karena benda Daftar hanya titik antara elemen dan tidak langsung ke ” saat ini “Elemen seperti yang dilakukan oleh iterator lain.

Untuk membuat objek Daftar , metode listiterator () disebut. Ini ditunjukkan bersama dengan penggunaan iterator ini dalam contoh berikut:

import java.util.ArrayList;
import java.util.ListIterator;

class Example2
{
  public static void main(String []args)
  {
    //creating an arraylist and adding values in it
    ArrayList num=new ArrayList<>();
    num.add(1);
    num.add(2);
    num.add(3);
    num.add(4);
    num.add(5);

    //creating a ListIterator 
    ListIterator cursor=num.listIterator();

    //traversing the list and printing its value
    System.out.println("The original list is:");
    while(cursor.hasNext()==true)
    {
      int index=cursor.nextIndex();
      int n=(Integer)cursor.next();
      System.out.println("value at "+index+" is : "+n);
    }

    //modifying the list by replacing values with their squares while traversing in backward direction
    while(cursor.hasPrevious()==true)
    {
      int n=(Integer)cursor.previous();
      int sq=n*n;
      cursor.set(sq);
    }

    //traversing the list and printing its value
    System.out.println("The modified list is:");
    while(cursor.hasNext()==true)
    {
      int index=cursor.nextIndex();
      int n=(Integer)cursor.next();
      System.out.println("value at "+index+" is : "+n);
    }

  }
} 

Lihat output berikut.

Iterators

Metode berikut adalah bagian dari Daftar Antarmuka:

boolean hasnext ()

Kembali BENAR Jika lebih banyak elemen hadir dalam koleksi yang tersisa untuk dilintasi ke arah depan. Kalau tidak, ia kembali Salah .

Sintaks: public abstrak boolean hasnext ()

boolean hasprevious ()

Kembali BENAR Jika lebih banyak elemen hadir dalam koleksi yang tersisa untuk dilintasi ke arah mundur. Kalau tidak, ia kembali Salah .

Sintaks: Publik abstrak boolean hasprevious ()

Objek selanjutnya ()

Mengembalikan elemen berikutnya ke elemen yang ditunjukkan oleh iterator saat ini. Melempar NosuchelementException Ketika tidak ada elemen seperti itu yang dapat diambil dengan cara ini.

Sintaks: objek abstrak publik berikutnya ()

Objek sebelumnya ()

Mengembalikan elemen sebelumnya ke elemen yang ditunjukkan oleh iterator saat ini. Melempar NosuchelementException Ketika tidak ada elemen seperti itu yang dapat diambil dengan cara ini.

Sintaks: objek abstrak publik sebelumnya ()

int nextIndex ()

Mengembalikan indeks elemen berikutnya. Mengembalikan ukuran daftar jika tidak ada lagi elemen yang tersisa seperti berikutnya.

Sintaks: abstrak publik int nextIndex ()

int sebelumnyaIndex ()

Mengembalikan indeks elemen sebelumnya. Mengembalikan -1, jika tidak ada lagi elemen yang ada sebelum iterator.

Sintaks: abstrak publik int priorIndex ()

void rape ()

Menghapus elemen terakhir yang diambil oleh Berikutnya( ) atau sebelumnya() metode. Melempar IlegalstateException jika menghapus( ) dipanggil sebelum salah satu dari metode ini. Melempar UnsupportedOperationException Kapan menghapus() tidak didukung.

Sintaks: void abstrak publik lepas ()

void add (objek ob)

Itu menambahkan objek tepat sebelum elemen dikembalikan oleh Berikutnya() metode atau tepat setelah elemen dikembalikan oleh sebelumnya() . Melempar UnsupportedOperationException , ClasscastException Jika objek yang dimaksud tidak dapat ditambahkan karena sifat kelasnya. Itu melempar IllegalargumentException untuk argumen ilegal.

Sintaksis : abstrak public void add (objek ob)

void set (objek ob)

Menggantikan objek yang dilewati dalam argumen dengan elemen terakhir yang diambil oleh Berikutnya() atau sebelumnya() metode. Melempar UnsupportedOperationException , IlegalstateException , ClasscastException , dan IllegalargumentException Dalam kondisi biasa dari pengecualian ini.

Sintaksis : set void abstrak publik (objek ob)

Enumerasi

Diperkenalkan sedini pada JDK 1.0 itu sendiri, Enumerasi Antarmuka berbeda dari iterator lain karena tidak memberikan metode langsung untuk menambah atau menghapus elemen. Ini membuat iterator lain lebih maju dari enumerasi tersebut, dan tidak perlu dikatakan karena itu, dokumen Java API juga menyarankan penggunaan iterator atas enumerasi.

Iterator enumerasi di java terutama dirancang untuk melintasi melalui Vektor kelas dan HABTABLE kelas. Untuk membuat enumerasi untuk a Vektor Kelas, The elemen () metode (hadir di Vektor kelas itu sendiri) dipanggil, dan juga, untuk HABTABLE , kunci () metode disebut.

Berikut ini adalah definisi dari Enumerasi antarmuka di Java.util kemasan.

public interface java.util.Enumeration {

  public abstract boolean hasMoreElements();

  public abstract E nextElement();

} 

Karena penghitungan gagal-aman, itu tidak melempar pengecualian seperti ConcurrentModificationException , yang merupakan kasus dengan iterator, misalnya, yang terjadi ketika koleksi dimodifikasi selama traversal. Ini, tidak diragukan lagi, dalam kasus enumerasi, mengkompromikan klausul keselamatan dan keamanan, yang merupakan bagian penting dari konsep Java apa pun.

Metode berikut adalah bagian dari Enumerasi Antarmuka:

Boolean HasmoreElements (): Metode ini dapat digunakan untuk memeriksa apakah ada lebih banyak elemen untuk dilintasi atau tidak. Mengembalikan nilai dalam Boolean.

Sintaks: Publik Abstrak Boolean HasmoreElements ()

Object NextElement (): Metode ini digunakan untuk mengembalikan elemen langsung berikutnya dari elemen yang disajikan oleh enumerasi. Melempar NosuchelementException .

Sintaksis : Objek abstrak publik NextElement ()

Program berikut menunjukkan pekerjaan Enumerasi.

Lihat contoh kode berikut.

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

class Example3
{
  public static void main(String [] args)
  {
    //creating a vector and inserting elements in it
    Vector colour= new Vector();
    colour.addElement("blue");
    colour.addElement("red");
    colour.addElement("green");

    //creating enumeration for traversing vector
    Enumeration cursor=colour.elements();

    //traversing vector
    System.out.println("Vector is: ");
    while(cursor.hasMoreElements()==true)
    {
      System.out.println(cursor.nextElement());
    }

    //creating Hashtable (a key value pair)
    Hashtable table = new Hashtable<>();
    table.put(1,"dog");
    table.put(2,"cat");
    table.put(3,"lion");

    //creating enumeration for traversing the hashtable
    Enumeration traverse = table.keys();

    //traversing the hashtable
    System.out.println("Hashtable is: ");
    while(traverse.hasMoreElements())
    {
      Integer key = (Integer)traverse.nextElement();
      System.out.println(key+" "+table.get(key));        //get method is used to fetch the value of corresponding key
    }
  }
} 

Lihat output berikut.

Enumeration

Itu untuk tutorial ini.

Artikel ini berasal dari website Winpoin, dan kemudian diterjemahkan ke bahasa indonesia, baca artikel asli disini

Leave a Reply

Your email address will not be published. Required fields are marked *