ความแตกต่างระหว่าง Iterator และ Listiterator?


138
Iterator ite = Set.iterator();
Iterator ite = List.iterator();

ListIterator listite = List.listIterator();

เราสามารถใช้IteratorการสำรวจSetหรือหรือList Mapแต่ListIteratorสามารถนำมาใช้เพื่อทำงานภายในก็ไม่สามารถเดินทางข้ามList Setทำไม?

ฉันรู้ว่าความแตกต่างที่สำคัญคือด้วยตัววนซ้ำเราสามารถเดินทางในทิศทางเดียวเท่านั้น แต่ด้วยการที่ListIteratorเราสามารถเดินทางได้ทั้งสองทิศทาง มีความแตกต่างอื่น ๆ อีกไหม? และข้อได้เปรียบใด ๆListIteratorมากกว่าIterator?


นอกเหนือไปจากคำตอบของปีเตอร์สผมอยากแนะนำให้คุณอ่านบทในการคิดใน java เกี่ยวกับ iterators กับตัวอย่างที่ดีทั้งหมดที่มี
มด

คำตอบ:


150

ความแตกต่างแสดงอยู่ใน Javadoc สำหรับListIterator

คุณสามารถ

  • วนซ้ำ
  • รับตัววนซ้ำได้ทุกจุด
  • เพิ่มมูลค่าใหม่ ณ จุดใดก็ได้
  • ตั้งค่าใหม่ ณ จุดนั้น

68
และสาเหตุที่คุณไม่สามารถทำได้ด้วย a Setง่าย: ไม่มี "จุดปัจจุบัน": องค์ประกอบไม่มีดัชนีและไม่มีวิธีที่เป็นประโยชน์คุณสามารถเพิ่มองค์ประกอบ "ก่อน" หรือ "หลัง" อีกอันได้
Joachim Sauer

@ Peter Lawrey ได้รับดัชนี ณ จุดใด ๆ - มันเกี่ยวกับวิธีpreviousIndex ()และnextIndex () ?
gstackoverflow

2
@gstackoverflow ตรวจสอบ java.util.List # listIterator (int)
kilonet

4
@ kilonet แทนที่จะได้รับดัชนี ณ จุดใดควรเป็นประโยคเช่น "รับตัววนซ้ำ ณ จุดใดก็ได้" เพื่อหลีกเลี่ยงความสับสน?
Shailesh Pratapwar

39

มีความแตกต่างสองประการ:

  1. เราสามารถใช้ Iterator เพื่อสำรวจ Set and List และ Map type of Objects ในขณะที่ ListIterator สามารถใช้ในการสำรวจวัตถุชนิดรายการ แต่ไม่ได้สำหรับชุดชนิดของวัตถุ

    นั่นคือเราสามารถรับวัตถุ Iterator โดยใช้ Set and List ดูที่นี่:

    โดยใช้ Iterator เราสามารถดึงองค์ประกอบจาก Collection Object ในทิศทางไปข้างหน้าเท่านั้น

    วิธีการใน Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. แต่เราได้รับ ListIterator object จาก List List เท่านั้นดูที่นี่:

    โดยที่ ListIterator อนุญาตให้คุณสำรวจในทิศทางใดทิศทางหนึ่ง (ทั้งไปข้างหน้าและข้างหลัง) ดังนั้นจึงมีสองวิธีเช่นhasPrevious()และ previous()อื่น ๆ นอกเหนือจาก Iterator นอกจากนี้เรายังสามารถรับดัชนีขององค์ประกอบถัดไปหรือก่อนหน้า (ใช้nextIndex() และpreviousIndex()ตามลำดับ)

    วิธีการใน ListIterator:

    1. hasNext ()
    2. ต่อไป()
    3. ก่อนหน้านี้ ()
    4. hasPrevious ()
    5. ลบ ()
    6. nextIndex ()
    7. previousIndex ()
    ListIterator listiterator = List.listIterator();

    นั่นคือเราไม่สามารถรับวัตถุ ListIterator จาก Set interface

การอ้างอิง: - Iterator และ ListIterator แตกต่างกันอย่างไร


39
ลักษณะเช่นนี้มันถูกตัดและวางส่วนใหญ่มาจากkirankumarjava.blogspot.com/2013/06/... คุณต้องรับทราบผู้เขียนต้นฉบับเสมอ
Cameron Skinner

25

Iterator เป็น ListIterator ระดับสูง

นี่คือความแตกต่างระหว่างพวกเขา:

  1. ด้วยiteratorคุณสามารถไปข้างหน้าเท่านั้น แต่ด้วยListIteratorคุณสามารถย้าย backword ในขณะที่อ่านองค์ประกอบ
  2. ด้วยListIteratorคุณสามารถได้รับดัชนี ณ จุดใด ๆ ในขณะที่ข้ามไปซึ่งเป็นไปไม่ได้กับiterators
  3. ด้วยiteratorคุณสามารถตรวจสอบเฉพาะองค์ประกอบต่อไปที่มีอยู่หรือไม่ แต่ในlistiteratorคุณสามารถตรวจสอบองค์ประกอบก่อนหน้าและถัดไป
  4. ด้วยlistiteratorคุณสามารถเพิ่มองค์ประกอบใหม่ได้ตลอดเวลาในขณะที่การเดินทาง iteratorไม่ได้กับ
  5. ด้วยlistiteratorคุณสามารถปรับเปลี่ยนองค์ประกอบในขณะที่ traversing iteratorซึ่งเป็นไปไม่ได้กับ

Iterator รูปลักษณ์:

 public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove(); //optional-->use only once with next(), 
                         dont use it when u use for:each
    }

ListIterator รูปลักษณ์และความรู้สึก:

public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove(); //optional
    void set(E e); //optional
    void add(E e); //optional
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.