Java มีอินเตอร์เฟซทั้งสองสำหรับวนลูปข้อมูลในคอลเลกชัน แตกต่างกันในรายละเอียดการทำงาน:
| ลำดับ | หัวข้อ | Iterator | ListIterator |
|---|---|---|---|
| 1 | ใช้กับ | ทุกคอลเลกชัน (Set, List, Queue, Deque, Map) | เฉพาะ List (ArrayList, LinkedList, เป็นต้น) |
| 2 | การเรียกใช้ | iterator() จาก Collection interface | listIterator() จาก List interface |
| 3 | ทิศทางวนลูป | ไปข้างหน้าได้อย่างเดียว (forward only) | ไปข้างหน้าและถอยหลังได้ (bidirectional) |
| 4 | การลบ | ไม่รองรับการลบ (remove() โยน Exception) | รองรับ remove() |
| 5 | การเพิ่ม | ไม่รองรับ add() | รองรับ add() |
| 6 | การแก้ไข | ไม่รองรับ set() | รองรับ set() แก้ไขค่าได้ |
| 7 | ดัชนีสมาชิก | ไม่มีเมธอดดัชนี | มี nextIndex(), previousIndex() |
ตัวอย่างเปรียบเทียบ
import java.io.*;
import java.util.*;
public class JavaTester {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1); list.add(2); list.add(3); list.add(4); list.add(5);
// Iterator - ไปข้างหน้าเท่านั้น
Iterator<Integer> itr = list.iterator();
System.out.println("Iterator traversal:");
while (itr.hasNext()) System.out.print(itr.next() + " ");
System.out.println();
// ListIterator - ไปข้างหน้าและถอยหลัง
ListIterator<Integer> li = list.listIterator();
System.out.println("ListIterator Forward:");
while (li.hasNext()) System.out.print(li.next() + " ");
System.out.println("\nListIterator Backward:");
while (li.hasPrevious()) System.out.print(li.previous() + " ");
}
}
ผลลัพธ์
Iterator traversal: 1 2 3 4 5
ListIterator Forward: 1 2 3 4 5
ListIterator Backward: 5 4 3 2 1
เลือกใช้: Iterator สำหรับคอลเลกชันทั่วไป ListIterator สำหรับ List ที่ต้องการนำทางสองทิศทางหรือแก้ไขระหว่างวนลูป