最近看到迭代附近了,一些數據結構,如列表,鏈表,集合等都喜歡使用迭代器來索引,我想主要是他們大多不基於下標,而且JAVA提供了迭代器對象。
for循環最簡單了,屬於counting loop,而while循環屬於conditional loop,一般死循環喜歡用while,可以計數的用for循環,原因是for循環比較節省內存資源,定義的索引在循環執行完之後就被內存回收了。
增強型for循環用於數組,比如說我們要遍歷一個字符串型數組str,語法爲for(String element: str){ element....}, 即for循環內提一個參數爲所要遍歷數組的類型,第二個爲我們自定義的變量名,比如說element, 然後是冒號(:),最後是所要遍歷的數組,然後我們在for循環內可以直接用element了,這個element就是每次得到的數組內的元素。增強型for循環比普通for循環效率要高,見增強型for循環效率。增強型for循環效率提升了,當然也有缺點,那就是對於關於下標的元素操作不支持。如果你有疑問,爲什麼每次獲得的element元素都是數組中的不同的元素呢?他又是怎麼全部遍歷的呢?接着看迭代器吧。
import java.util.*;
public class ArrayListTest
{
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("China");
list.add("America");
list.add("Russia");
list.add("Canada");
Iterator <String> it = list.listIterator();
while (it.hasNext())
{
String str = it.next();
System.out.println(str);
}
}
}
注意:
Iterator it = list.listIterator();
表明list對象調用iterator()方法,返回一個Iterator對象,此時,迭代器的指針指向第一個元素,然而參考API 註釋文檔,我們發現,
listIterator()有重載函數listIterator(int index),指定其起始位置。
此時,我們就可以改寫下面這一部分,以使得迭代器從後向前迭代。
List<String> list = new ArrayList<String>();
Iterator <String> it = list.listIterator(list.size());
while (it.hasPrevious())
{
String str = it.previous();
System.out.println(str);
}