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

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


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