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