在使用java集合的时候,需要用到它们。 但是java集合中还有一个迭代器,可以在使用List、、、时使用。 这两个迭代器有什么区别? 下面我们来详细分析一下。 这里需要明确一点,迭代器指向的位置是元素之前的位置,如下图所示:
这里假设集合List由四个元素List1、List2、List3和List4组成。 当使用it = List.()语句时,迭代器it指向的位置就是上图中指向的位置。 当语句 it.next() 被执行后,迭代器指向的位置就移回到上图指向的位置。
首先看看迭代器有哪些方法。
迭代器中包含的方法有:
():如果迭代器指向位置后面有元素,则返回true,否则返回false
next():返回集合中指向位置之后的元素
():删除集合中指向位置之后的元素
迭代器中包含的方法有:
add(E e):将指定元素插入到列表中,插入位置在迭代器当前位置之前
():向前遍历列表时,如果列表迭代器后面有元素,则返回true,否则返回false
():如果反向遍历列表,并且列表迭代器前面有元素,则返回true,否则返回false
next():返回列表中指向位置之后的元素
():返回列表中所需位置之后的元素的索引
():返回列表中指向位置之前的元素
():返回列表中所需位置之前的元素的索引
():从列表中删除next()或()返回的最后一个元素(有点拗口,意思是在迭代器上使用()方法时,删除指向位置后面的元素;使用()时迭代器上的方法,删除指向位置之前的元素)
set(E e):将列表中next()返回的最后一个元素或()返回的最后一个元素更改为指定元素e
一、相同点
两者都是迭代器,当需要遍历集合中的元素时,都可以使用这两种迭代器,而不会干扰遍历过程。
二元差异
1、使用范围不同,可以适用于所有集合、Set、List、Map以及这些集合的子类型。 相反,它只能用于 List 及其子类型。
2.有一个add方法,可以向List中添加对象,但是不能。
3.有()和next()方法,可以实现顺序向后遍历,但有()和()方法,可以实现反向(顺序向前)遍历。 不能。
4、可以定位当前索引的位置,()和()可以实现。 没有这样的功能。
5、可以实现删除操作,但可以实现对象的修改,可以实现set()方法。 只能遍历,不能修改。
三:及使用示例
用法:
package com.collection;
import java.util.linkedList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
List staff = new linkedList<>();
staff.add("zhuwei");
staff.add("xuezhangbin");
staff.add("taozhiwei");
ListIterator iter = staff.listIterator();
String first = iter.next();
//删除zhuwei
iter.remove();
//把zhuwei改为simei
//iter.set("simei");
System.out.println("first:"+first);
iter.add("xiaobai");
//遍历List元素
System.out.println("遍历List中元素,方法一:");
for(String str : staff)
System.out.println(str+" ");
iter = staff.listIterator();
System.out.println("遍历List中元素,方法二:");
while(iter.hasNext())
{
System.out.println(iter.next());
}
}
}