從頭認識java-9.5 迭代器Iterator
這一章節我們來討論一些迭代器Iterator。
1.概念
迭代器(iterator)有時又稱遊標(cursor)是程式設計的軟體設計模式,可在容器(container,例如鏈表或陣列)上遍訪的介面,設計人員無需關心容器的內容。
package com.ray.ch09;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.Iterator;public class Test {public static void Traversal(Collection collection) {Iterator it = collection.iterator();while (it.hasNext()) {int rtn = it.next();System.out.println(rtn);}}public static void main(String[] args) {ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {list.add(i);}HashSet set = new HashSet();for (int i = 0; i < 10; i++) {set.add(i);}System.out.println(---------list---------);Traversal(list);System.out.println(---------set---------);Traversal(set);}}
從上面的代碼可以看見,使用迭代器,不管是list還是set,都可以重複使用Traversal這個方法,這樣使得代碼重用性得到提高。
2.注意點
(1)我們只需要接收容器,即可以在每個對象上面操作
package com.ray.ch09;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class Test {public static void Traversal(Collection collection) {Iterator it = collection.iterator();while (it.hasNext()) {Person person = it.next();System.out.println(person.getId());}}public static void main(String[] args) {ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {Person person = new Person();person.setId(i);list.add(person);}Traversal(list);}}class Person {private int id = 0;public int getId() {return id;}public void setId(int id) {this.id = id;}}
從上面的代碼可以看見,我們可以通過迭代器類型的轉換,轉換成Person類型,然後持有了Person這個對象的引用,那麼現在就可以對person對象進行操作。
(2)remove()方法的使用
package com.ray.ch09;import java.util.ArrayList;import java.util.Iterator;public class Test {public static void main(String[] args) {ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {list.add(i);}Iterator iterator = list.iterator();iterator.next();// 如果我們注釋了這一句,運行時就會拋異常iterator.remove();}}
當我們使用remove方法的時候,必須先使用next方法,使得迭代器裡面已經指向一個新的對象。
總結:這一章節簡單討論了迭代器的概念,以及相應的注意點。