Java基礎複習筆記--Iterator和ListIterator 迭代器的使用(遍歷集合) Java類集框架——Iterator和ListIterator 迭代器的使用(遍歷集合)
阿新 • • 發佈:2018-12-30
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、對於此介面中的增加以及修改操作,用的不是太多,瞭解即可。