Java基础复习笔记--Iterator和ListIterator 迭代器的使用(遍历集合) Java类集框架——Iterator和ListIterator 迭代器的使用(遍历集合)

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

学习目标:

掌握集合输出的标准操作。
掌握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、对于此接口中的增加以及修改操作,用的不是太多,了解即可。

猜你喜欢

转载自blog.csdn.net/YerikStone/article/details/82884395