Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง Iterator และ ListIterator ใน Java

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 ที่ต้องการนำทางสองทิศทางหรือแก้ไขระหว่างวนลูป