本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
Debug 笔记 <Iterator和ListIterator的区别是什么?>
相同点
Iterator和ListIterator都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。
不同点
1.所属关系
ListIterator是一个Iterator的子类型。
2.ListIterator 比 Iterator多方法
Iterator迭代器包含以下三种方法:
boolean hasNext():如果仍有元素可以迭代,则返回true。E next():返回迭代的下一个元素。void remove():从迭代器指向的collection中移除迭代器返回的最后一个元素,每次调用next只能调用一次此方法。
ListIterator迭代器包含以下九种方法:
void add(E e):将指定的元素插入列表。boolean hasNext():以正向遍历列表时,如果列表迭代器有多个元素,则返回true。boolean hasPrevious():如果以逆向遍历列表,列表迭代器有多个元素,则返回true。E next():返回列表中的下一个元素。int nextIndex():返回对next的后续调用所返回元素的索引。E previous():返回列表中的前一个元素。int previousIndex():返回对previous的后续调用所返回元素的索引。void remove():从列表中移除由next或previous返回的最后一个元素。void set(E e):用指定元素替换next或previous返回的最后一个元素。
3.使用范围不同,
Iterator可以迭代所有集合;ListIterator 只能用于List及其子类。
遍历集合的案例
对于Iterator而言,因为本身是一个接口,所以要想实例化则必须依靠Collection接口完成。
Iterator<E> iterator()
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class demo1{
public static void main(String args[]){
List<String> all= new ArrayList<String>() ; //
all.add("Hello") ;
all.add("Jue") ;
all.add("Jin") ;
Iterator<String> iter = all.iterator() ; // 为Iterator接口实例化
while(iter.hasNext()){ // 判断是否有内容
System.out.println(iter.next()) ; // 输出内容
}
}
};
输出为:
Iterator接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或者是由前向后的双向输出,则就必须使用Iterator的子接口ListIterator。
import java.util.ArrayList ;
import java.util.List ;
import java.util.ListIterator ;
public class demo1{
public static void main(String argsp[]){
List<String> all = new ArrayList<String>() ;
all.add("Hello") ;
all.add("Jue") ;
all.add("Jin") ;
ListIterator<String> iter = all.listIterator() ;
System.out.print("由前向后输出:") ;
while(iter.hasNext()){
String str = iter.next() ;
System.out.print(str + " ") ;
}
System.out.print("\n由后向前输出:") ;
while(iter.hasPrevious()){
String str = iter.previous() ;
System.out.print(str + " ") ;
}
}
};
输出为: