当前位置:

Iterator 和 ListIterator 有什么区别?

机器助手 |  2025-07-13
 100人浏览

我们在使用集合的时候都会使用到迭代器(Iterator),迭代器依附与集合对象存在,本身不具备装载对象的能力。

迭代器的好处是

  1. 集合本身提供了访问对象各个元素的途径,同时不暴露对象的内部细节。
  2. 在遍历过程中可以删除元素,通过remove方法。

方法列表

首先我们看一下Iterator和ListIterator迭代器的方法有哪些个?

Iterator的方法

43564b3250b24a4f8e33efee18486918

ListIterator的方法

791032647eaf4984af72a64bea313759

在两者的方法中我们挑常用介绍

Iterator迭代器:

  • hasNext():如果迭代器指向位置后面还有元素,则返回 true,否则返回false
  • next():返回集合中Iterator指向位置后面的元素
  • remove():删除集合中Iterator指向位置后面的元素

ListIterator迭代器:

  • add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前
  • hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false
  • hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
  • next():返回列表中ListIterator指向位置后面的元素
  • nextIndex():返回列表中ListIterator所需位置后面元素的索引
  • previous():返回列表中ListIterator指向位置前面的元素
  • previousIndex():返回列表中ListIterator所需位置前面元素的索引
  • remove():从列表中删除next()或previous()返回的最后一个元素
  • set(E e):从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e

方法相同点

  1. 种方法都可以遍历集合元素使用
  2. 是集合中提供的内部方法

方法不同点

  1. Iterator在使用过程中,不能对集合元素进行添加操作,否则会抛出异常。
  2. 使用范围不同;Iterator可以在所有集合中使用,而ListIterator只能在List类型与子类型
  3. listIterator有add方法,可以向集合中添加元素,而iterator不能。
  4. listiterator和iterator都有hasnext和next方法可以顺序遍历元素, 但是listiterator有hasprevious和previous方法,可以逆向遍历元素
  5. listiterator可以定位当前的索引位置 nextIndex和previousIndex可以实现,iterator没有此功能
  6. listiterator可以实现对对象的修改set()方法可以实现,iterator仅可以遍历,不能修改。

代码实例


 

//测试迭代器的简单代码 // @Test public void TestIterator(){ List<String> aslist = new ArrayList<String>(); aslist.add("张三"); aslist.add("李四"); aslist.add("王五"); aslist.add("赵六"); aslist.add("田七"); Iterator<String> iterator = aslist.iterator(); aslist.set(0, "张小三");//这里只是创建了迭代器,并没有使用所以没有抛出异常 //正向遍历 int i=0; while(iterator.hasNext()){//此方法如果迭代器指向位置后面还有元素,则返回 true,否则返回false //输出语句结果 i++; String   name=iterator.next(); if(name.equals("赵六")){ name=aslist.set(i, "赵小六"); //iterator.remove();   //使用删除方法删除此元素 } /*aslist.set(0, "张三"); * 在使用过程中有aslit中的set方法修改时是可以的, * 但是迭代器本身没有修改方法 *  */ System.out.println(name); //aslist.add("陈八");//在迭代器使用的时候,向aslist添加元素抛出异常 } } @Test public void TestListIterator(){ List<Integer> aslist = new ArrayList<Integer>(); aslist.add(1); aslist.add(2); aslist.add(3); aslist.add(4); aslist.add(5); aslist.add(6); ListIterator<Integer> listIterator = aslist.listIterator(); //正向遍历 while(listIterator.hasNext()){ Integer integer = listIterator.next(); if(integer.equals(2)){ //迭代器自带修改方法 listIterator.set(20); } } ListIterator<Integer> listIterator2 = aslist.listIterator(aslist.size()); //反向遍历 //反向遍历要注意的是需要将集合的长度标明【aslist.listIterator(aslist.size())】,否则遍历会有问题 while(listIterator2.hasPrevious()){ Integer previous = listIterator2.previous(); System.out.println(previous); } }

文章评论