1. 程式人生 > >Java基礎複習筆記--Iterator和ListIterator 迭代器的使用(遍歷集合) Java類集框架——Iterator和ListIterator 迭代器的使用(遍歷集合)

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、對於此介面中的增加以及修改操作,用的不是太多,瞭解即可。