2012-06-11 48 views
109
Iterator ite = Set.iterator(); 
Iterator ite = List.iterator(); 

ListIterator listite = List.listIterator(); 

Chúng ta có thể sử dụng Iterator phải đi qua một Set hoặc một List hoặc một Map. Nhưng chỉ có thể sử dụng ListIterator để đi qua một số List, nó không thể đi qua một số Set. Tại sao?Sự khác nhau giữa Iterator và Listiterator?

Tôi biết rằng sự khác biệt chính là với trình vòng lặp, chúng ta có thể di chuyển chỉ theo một hướng nhưng với ListIterator chúng ta có thể di chuyển cả hai hướng. Có sự khác biệt nào khác không? Và bất kỳ lợi thế nào của ListIterator qua Iterator?

+0

ngoài Peters câu trả lời tôi khuyên bạn nên đọc một chương trong suy nghĩ trong java về iterators với tất cả các ví dụ tốt đẹp có – ant

+0

thấy điều này cũng: http: //www.java67.com/2016/09/5-difference- giữa-iterator-và-ListIterator-in-java.html – roottraveller

Trả lời

124

Sự khác biệt được liệt kê trong Javadoc cho ListIterator

Bạn có thể

  • lặp ngược
  • có được lặp bất cứ lúc nào.
  • thêm một giá trị mới tại bất kỳ thời điểm nào.
  • đặt giá trị mới tại thời điểm đó.
+61

Và lý do tại sao bạn không thể làm điều đó với một 'Set' là đơn giản: Không có" điểm hiện tại ": Các yếu tố không có chỉ mục và không có cách hữu ích bạn có thể thêm phần tử "trước" hoặc "sau" phần tử khác. –

+0

@Peter Lawrey ** lấy chỉ mục tại bất kỳ thời điểm nào ** - Có phải về phương thức * previousIndex() * và * nextIndex() * không? – gstackoverflow

+2

@gstackoverflow kiểm tra java.util.List # listIterator (int) – kilonet

31

Có hai khác biệt:

  1. Chúng ta có thể sử dụng Iterator để đi qua Set và Danh mục và cũng Map loại đối tượng. Trong khi một ListIterator có thể được sử dụng để đi qua đối tượng List-type, nhưng không dùng cho Set-type of Objects.

    Nghĩa là, chúng ta có thể có được một đối tượng Iterator bằng cách sử dụng Set và Danh mục, xem tại đây:

    Bằng cách sử dụng Iterator chúng ta có thể lấy các yếu tố từ Collection Object trong chỉ hướng về phía trước.

    Methods in Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator(); 
    Iterator iterator = List.iterator();
  2. Nhưng chúng tôi nhận đối tượng ListIterator chỉ từ giao diện Danh sách, xem tại đây:

    ở đâu với tư cách là một ListIterator cho phép bạn đi qua theo một trong hai hướng (Cả hai phía trước và phía sau). Vì vậy, nó có hai phương pháp khác như hasPrevious()previous() khác với các phương pháp của Iterator.Ngoài ra, chúng tôi có thể nhận được các chỉ số của các yếu tố tiếp theo hoặc trước đó (sử dụng nextIndex()previousIndex() tương ứng)

    Methods in ListIterator:

    1. hasNext()
    2. tiếp theo()
    3. trước()
    4. hasPrevious()
    5. xóa()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();

    nghĩa là, chúng ta không thể có được đối tượng ListIterator từ Set giao diện.

tham khảo: - What is the difference between Iterator and ListIterator ?

+30

Điều này có vẻ như phần lớn được cắt và dán từ http://kirankumarjava.blogspot.com/2013/06/what-is-difference-between-iterator-and.html. Bạn phải luôn luôn thừa nhận tác giả gốc. –

15

Iterator là siêu lớp của ListIterator.

Dưới đây là những khác biệt giữa chúng:

  1. Với iterator bạn có thể di chuyển chỉ về phía trước, nhưng với ListIterator bạn có thể di chuyển backword cũng trong khi đọc các yếu tố.
  2. Với ListIterator bạn có thể lấy chỉ mục tại bất kỳ thời điểm nào trong khi đi ngang, điều này là không thể với iterator s.
  3. Với iterator bạn chỉ có thể kiểm tra phần tử tiếp theo có sẵn hay không, nhưng trong listiterator bạn có thể kiểm tra các yếu tố trước đó và tiếp theo.
  4. Với listiterator bạn có thể thêm phần tử mới tại bất kỳ thời điểm nào trong khi đi ngang qua. Không thể với iterator.
  5. Với listiterator bạn có thể sửa đổi phần tử trong khi đi ngang, điều này là không thể với iterator.

Iterator diện:

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 diện:

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 
} 
1

Iterator Và ListIterator Difference

  1. Chúng ta có thể sử dụng Iterator để đi qua Set and List và cũng có thể Map type of Objects. Nhưng List Iterator có thể được sử dụng để duyệt qua đối tượng List type, nhưng không dùng cho Set type of Objects.

Nghĩa là, chúng ta có thể có được một đối tượng Iterrator bằng cách sử dụng Set và Danh mục, xem tại đây:

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

Nhưng chúng tôi nhận đối tượng Danh sách Iterator chỉ từ giao diện Danh sách, xem tại đây:

ListIterator listite = List.listIterator(); 

nghĩa là chúng tôi không thể lấy đối tượng Danh sách Iterator từ giao diện Set.

  1. Bằng cách sử dụng Iterator, chúng tôi có thể truy lục các phần tử từ đối tượng thu thập chỉ theo hướng thuận.

    • trong đó Danh sách Iterator, cho phép bạn đi qua theo một trong hai hướng. Đó là danh sách Iterator đi qua hai hướng. Vì vậy, nó có một phương pháp khác hasPrevious() & previous() trừ Iterator.
+1

Bạn đã lặp lại câu hỏi, nhưng bạn đã không thực sự trả lời câu hỏi đó. –

2

Ưu điểm của ListIterator qua Iterator là chúng ta có thể thêm phần tử ở bất kỳ thời điểm trong khi vượt qua một danh sách sử dụng ListIterator.

Các vấn đề liên quan