Java中迭代器和ListIterator的区别

迭代器

Java 中的 Collection 框架中使用迭代器来逐个检索元素。它可以应用于任何 Collection 对象。通过使用迭代器,可以执行读取和删除操作。每当想要枚举所有 Collection 框架实现的接口(如 SetListQueueDeque)以及所有实现的 Map 接口类中的元素时,都必须使用迭代器。迭代器是整个集合框架唯一可用的游标。可以通过调用 Collection 接口中的 iterator() 方法来创建迭代器对象。

// Here "c" is any Collection object. itr is of // type Iterator interface and refers to "c"/nIterator itr = c.iterator(); 

列表迭代器

它仅适用于 List 集合实现的类,如 arraylistlinkedlist 等。它提供双向迭代。当要枚举 List 的元素时,必须使用 ListIterator。这个游标比迭代器有更多的功能(方法)。ListIterator 对象可以通过调用 List 接口中的 listIterator() 方法来创建。

// Here "l" is any List object, ltr is of type // ListIterator interface and refers to "l"/nListIterator ltr = l.listIterator(); 

Iterator 和 ListIterator 的区别:

区别1: Iterator 只能向前遍历,而 ListIterator 可以向前和向后遍历。
例子:

import java.io.*; import java.util.*;  class IteratorDemo1 {     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:");         System.out.println("Forward traversal: ");         while (itr.hasNext()){             System.out.print(itr.next() + " ");         }         System.out.println();          // ListIterator         ListIterator i = list.listIterator();          System.out.println("ListIterator:");         System.out.println("Forward Traversal : ");          while (i.hasNext()){             System.out.print(i.next() + " ");         }         System.out.println();         System.out.println("Backward Traversal : ");         while (i.hasPrevious())             System.out.print(i.previous() + " ");         System.out.println();     } } 

运行结果:

Iterator: Forward traversal:  1 2 3 4 5   ListIterator: Forward Traversal :  1 2 3 4 5  Backward Traversal :  5 4 3 2 1 

区别2: ListIterator 可以帮助替换元素,而 Iterator 不能。
例子:

 import java.util.ArrayList; import java.util.ListIterator;  public class YiibaiDemo {      public static void main(String[] args) {          ArrayList<Integer> aList  = new ArrayList<Integer>();         aList.add(1);         aList.add(2);         aList.add(3);         aList.add(4);         aList.add(5);          System.out.println("Elements of ArrayList: ");         for (Integer i : aList) {             System.out.println(i);         }         ListIterator<Integer> l = aList.listIterator();         l.next();         l.set(80000);          System.out.println("Now the ArrayList" + " elements are: ");         for (Integer i : aList) {             System.out.println(i);         }     } } 

运行结果:

Elements of ArrayList:  1 2 3 4 5  Now the ArrayList elements are:  80000 2 3 4 5 

Iterator 和 ListIterator 比较和区别

Iterator ListIterator
只能向前遍历 Collection 中存在的元素 可以向前和向后遍历 Collection 中存在的元素
帮助遍历 Map、List 和 Set 只能遍历 List 而不能遍历其他两个
使用迭代器无法获取索引 它具有 nextIndex()previousIndex()等方法,可以在遍历 List 时随时获取元素的索引
无法修改或替换集合中存在的元素 可以在 set(E e) 的帮助下修改或替换元素
无法添加元素并引发 ConcurrentModificationException 可以随时轻松地将元素添加到集合中
Iterator 的某些方法是 next()remove()hasNext() ListIterator 的某些方法是 next()previous()hasNext()hasPrevious()add(E e)

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264287.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论