Java类集框架——Iterator和ListIterator 迭代器的使用(遍历集合)

来源:互联网 发布:seo 百度云 编辑:程序博客网 时间:2024/05/29 14:29

学习目标:

掌握集合输出的标准操作。
掌握Iterator接口的主要作用及使用注意事项。
掌握ListIterator与Iterator接口的关系及区别。
掌握ListIterator接口的使用限制。

在集合的操作中支持以下几种方式:
 Iterator
 ListIterator
 foreach输出
 Enumeration输出

Iterator接口简介

集合输出的标准操作:
在使用集合输出的时候必须要形成以下的一个思路:只要是遇到集合输出的操作,就一定使用Iterator接口,因为这是最标准的办法。
Iterator接口的输出原理:
Iterator是专门的迭代输出接口,所谓的迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出。
 
对于Iterator而言,因为本身是一个接口,所以要想实例化则必须依靠Collection接口完成。
Iterator<E> iterator()
实例如下:
import java.util.List ;import java.util.ArrayList ;import java.util.Iterator ;public class IteratorDemo01{public static void main(String args[]){List<String> all=  new ArrayList<String>() ;// all.add("hello") ;all.add("_") ;all.add("world") ;Iterator<String> iter = all.iterator() ;// 为Iterator接口实例化while(iter.hasNext()){// 判断是否有内容System.out.println(iter.next()) ;// 输出内容}}};

以上的操作代码属于Iterator的标准做法。
在Iterator接口中提供了remove()方法,此方法的功能是删除当前的对象。
import java.util.List ;import java.util.ArrayList ;import java.util.Iterator ;public class IteratorDemo02{public static void main(String args[]){List<String> all=  new ArrayList<String>() ;// all.add("hello") ;all.add("_") ;all.add("world") ;Iterator<String> iter = all.iterator() ;// 为Iterator接口实例化while(iter.hasNext()){// 判断是否有内容String str = iter.next() ;if("_".equals(str)){iter.remove() ;// 删除元素}else{System.out.println(str) ;// 输出内容}}System.out.println("删除之后的集合:" + all) ;}};

在实际中是很少调用删除操作的,因为其本身的功能就是输出内容。当然,对于删除操作也有如下一个注意点:
  List接口本身存在删除方法:remove
如果在使用迭代输出的过程中使用了List中的remove()执行删除操作,则代码将出现问题。
import java.util.List ;import java.util.ArrayList ;import java.util.Iterator ;public class IteratorDemo03{public static void main(String args[]){List<String> all=  new ArrayList<String>() ;// all.add("hello") ;all.add("_") ;all.add("world") ;Iterator<String> iter = all.iterator() ;// 为Iterator接口实例化while(iter.hasNext()){// 判断是否有内容String str = iter.next() ;if("_".equals(str)){all.remove(str) ;// 删除元素}else{System.out.println(str) ;// 输出内容}}System.out.println("删除之后的集合:" + all) ;}};

在使用Itarator删除时,不要使用集合类中的remove()方法,而只能使用Iterator接口中的remove()方法。

ListIterator接口

Iterator接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或者是由前向后的双向输出,则就必须使用Iterator的子接口ListIterator。
ListIterator接口的定义如下:
public interface ListIterator<E> extends Iterator<E>
虽然此接口可以进行双向输出,但是很遗憾的是Collection接口中并没有定义可以为此类实例化的操作,只有List接口中才存在了ListIterator接口的实例化操作。
实例如下:完成双向输出。
import java.util.ArrayList ;import java.util.List ;import java.util.ListIterator ;public class ListIteratorDemo01{public static void main(String argsp[]){List<String> all = new ArrayList<String>() ;all.add("hello") ;all.add("_") ;all.add("world") ;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 + "、") ;}}};

此时已经完成了双向输出操作。
但是,在使用此操作的时候一定要注意一点:一定要先进行由前向后输出,之后才能进行由后向前的输出
使用ListIterator还可以进行增加以及替换元素。
 add()
 set()
import java.util.ArrayList ;import java.util.List ;import java.util.ListIterator ;public class ListIteratorDemo02{public static void main(String argsp[]){List<String> all = new ArrayList<String>() ;all.add("hello") ;all.add("_") ;all.add("world") ;ListIterator<String> iter = all.listIterator() ;System.out.print("由前向后输出:") ;while(iter.hasNext()){String str = iter.next() ;System.out.print(str + "、") ;iter.set("LIU - " + str) ;// 修改内容}System.out.print("\n由后向前输出:") ;iter.add("LX");while(iter.hasPrevious()){String str = iter.previous() ;System.out.print(str + "、") ;}}};



总结:
1、Iterator接口的功能是从前向后输出,属于单向的输出。
2、Iterator的主要功能就是完成迭代输出操作的。
3、在使用Iterator的时候最好不要删除数据。
4、如果要想使用ListIterator则只能依靠List接口完成。
5、如果要进行由后向前的输出,则只能先进行由前到后的输出。
3、对于此接口中的增加以及修改操作,用的不是太多,了解即可。
0 0
原创粉丝点击