Java - Bagaimana Menggunakan Iterator?

Selamat datang, para pemula dalam dunia programming! Hari ini, kita akan mendalamkan pengenalan ke dalam dunia yang menarik dari Java Iterators. Jangan khawatir jika Anda baru saja memulai programming; saya akan mengarahkan Anda melalui konsep ini secara berangsur-angsur, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Mari kita memulai perjalanan yang menarik ini bersama!

Java - Iterators

Apa Itu Iterator?

Imaginasikan Anda memiliki sebuah kotak besar penuh dengan blok Lego berwarna-warni. Iterator adalah seperti seorang asisten magis yang memungkinkan Anda untuk melalui setiap blok satu per satu, tanpa perlu menguras seluruh kotak. Ini adalah cara untuk mengakses elemen dalam koleksi secara berurutan, tanpa perlu mengetahui struktur dasar dari koleksi itu.

Mengapa Menggunakan Iterators?

Iterators sangat berguna karena mereka menyediakan cara standar untuk menelusuri berbagai jenis koleksi (seperti list, set, atau map) menggunakan interface yang sama. Ini berarti Anda dapat menulis kode yang bekerja dengan banyak jenis koleksi berbeda tanpa perlu mengubah logika penelusuran Anda.

Interface Iterator

Dalam Java, interface Iterator adalah bagian dari Java Collections Framework. Itu mendeklarasikan metode-metode berikut:

Metode Deskripsi
hasNext() Mengembalikan true jika masih ada elemen lain dalam koleksi
next() Mengembalikan elemen berikutnya dalam koleksi
remove() Menghapus elemen terakhir yang dikembalikan oleh next() (operasi opsional)

Penggunaan Dasar Iterator

Mari kita mulai dengan contoh sederhana untuk melihat bagaimana Iterator bekerja:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");

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

while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
}
}

Dalam contoh ini, kita membuat sebuah list buah dan kemudian menggunakan Iterator untuk menelusuri setiap buah dan mencetaknya. Mari kitauraikan ini:

  1. Kita membuat sebuah ArrayList dari string dan menambahkan beberapa buah.
  2. Kita mendapatkan sebuah Iterator dari list menggunakan metode iterator().
  3. Kita menggunakan perulangan while untuk memeriksa jika masih ada elemen lain (hasNext()).
  4. Dalam loop, kita menggunakan next() untuk mendapatkan buah berikutnya dan mencetaknya.

Ketika Anda menjalankan kode ini, Anda akan melihat setiap buah dicetak di baris yang berbeda. Seperti Iterator kita memilih setiap buah dari kotak dan menunjukkannya ke kita satu per satu!

Interface ListIterator

Untuk list, Java menyediakan iterator yang ditingkatkan disebut ListIterator. Itu menambahkan fungtionalitas lebih banyak ke interface Iterator:

Metode Deskripsi
add(E e) Sisipkan elemen yang ditentukan ke dalam list
hasPrevious() Mengembalikan true jika masih ada elemen sebelumnya
previous() Mengembalikan elemen sebelumnya dalam list
nextIndex() Mengembalikan indeks elemen yang akan dikembalikan oleh next()
previousIndex() Mengembalikan indeks elemen yang akan dikembalikan oleh previous()
set(E e) Mengganti elemen terakhir yang dikembalikan oleh next() atau previous()

Menggunakan ListIterator

Mari kita lihat bagaimana kita dapat menggunakan ListIterator untuk menelusuri list dalam dua arah:

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

public class ListIteratorExample {
public static void main(String[] args) {
List<String> colors = new ArrayList<>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");

ListIterator<String> listIterator = colors.listIterator();

System.out.println("Arah maju:");
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}

System.out.println("\nArah mundur:");
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
}
}

Dalam contoh ini, kita menggunakan ListIterator untuk menelusuri list warna ke depan dan kemudian ke belakang. Seperti berjalan melalui blok Lego dari awal ke akhir, dan kemudian kembali lagi!

Mengubah Koleksi Saat Iterating

Salah satu hal yang menarik tentang Iterators adalah bahwa mereka memungkinkan Anda untuk mengubah koleksi saat Anda masih menelusuriinya. Mari kita lihat contoh di mana kita menghapus elemen yang memenuhi kriteria tertentu:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorRemoveExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}

Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
Integer number = iterator.next();
if (number % 2 == 0) {
iterator.remove();
}
}

System.out.println("Bilangan ganjil: " + numbers);
}
}

Dalam contoh ini, kita menghapus semua bilangan genap dari list kita. Kita menggunakan metode remove() dari Iterator untuk menghapus elemen dengan aman saat iterasi. Jika kita mencoba menghapus elemen langsung dari list saat iterasi, kita akan mendapatkan ConcurrentModificationException. Seperti menghapus beberapa blok Lego dari kotak kita saat kita sedang melalui mereka, tanpa mengganggu proses pengurusan kita!

Kesimpulan

Iterators adalah alat yang kuat dalam Java yang memungkinkan kita untuk menelusuri koleksi secara efisien dan aman. Mereka menyediakan cara yang seragam untuk mengakses elemen dalam berbagai jenis koleksi, membuat kode kita lebih fleksibel dan dapat digunakan kembali.

Ingat, programming adalah seperti membangun dengan blok Lego. Iterators adalah salah satu dari banyak alat yang menarik yang Anda miliki. Teruslatih, terus eksplor, dan segera Anda akan membangun hal-hal menakjubkan dengan Java!

Selamat coding, para pemrogram masa depan! ??‍??‍?

Credits: Image by storyset