1. 程式人生 > >#Java集合--ListIterator和Iterator迭代器的聯絡與區別

#Java集合--ListIterator和Iterator迭代器的聯絡與區別

List的listIterator()方法會返回一個ListIterator迭代器物件,該迭代器的功能和Iterator迭代器基本相同,基本使用如下所示:

ListIterator<String> iterator = list.listIterator(); 
for(;iterator.hasNext();){
	String value = iterator.next();
	System.out.print(value+" ");
}

如果使用iterator()方法,我們也可以對list元素進行迭代,(iterator()是對Iterable介面iterator()方法的覆蓋):

System.out.println("\nIterator的iterator()方法:");
Iterator<String> iterator2 = list.iterator();
while(iterator2.hasNext()){
	String value = iterator2.next();
	System.out.print(value+" ");
}

但是,ListIterator和Iterator迭代器還有區別:
a、listIterator繼承自Iterator,繼承結構如下所示。

public interface ListIterator<E> extends Iterator<E>

b、Iterator迭代器僅有三個方法,分別是hasNext()、next()和remove(),能夠實現順序遍歷和元素的刪除;我們來看一下使用迭代器刪除list集合的元素:

System.out.println("\nIterator的remove方法:");
Iterator<String> iterator3 = list.iterator();
while(iterator3.hasNext()){
	String value = iterator3.next();
	//刪除5這個元素
	if("5".equals(value)){
		iterator3.remove();
	}
}

for(String s:list){
	System.out.print(s+" ");
}

而ListIterator迭代器除了實現上面Iterator的功能外,還可以通過add()方法新增元素:

System.out.println("\nListIterator的remove方法:");
ListIterator<String> iterator4 = list.listIterator();
while(iterator4.hasNext()){
	String value = iterator4.next();
	if("2".equals(value)){
		iterator4.remove();
	}
}
//新增元素
iterator4.add("5");
iterator4.add("6");
for(String s:list){
	System.out.print(s+" ");
}

c、ListIterator支援逆序遍歷,可以使用hasPrevious()和previous()來實現list的逆序遍歷:

System.out.println("\nListIterator的逆序遍歷:");
while(iterator4.hasPrevious()){
	String value = iterator4.previous();
	System.out.print(value+" ");
}

d、ListIterator支援元素的修改,可以通過set方法對list現有的元素進行修改,注意,修改的是list的元素,當前的迭代器的元素的更改可能不會生效:

System.out.println("\nListIterator元素的設定:");
while(iterator4.hasNext()){
	String value = iterator4.next();
	iterator4.set(value+"-");
	System.out.print(value+" ");
}
System.out.println();
for(String s:list){
	System.out.print(s+" ");
}