正常我們會這樣寫:
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple", "pear", "banana");
for (int i=0; i<list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
}
}
但這種方式並不推薦,一是代碼複雜,二是因爲get(int)
方法只有ArrayList
的實現是高效的,換成LinkedList
後,索引越大,訪問速度越慢。
所以我們要始終堅持使用迭代器Iterator
來訪問List
。Iterator
本身也是一個對象,但它是由List
的實例調用iterator()
方法的時候創建的。Iterator
對象知道如何遍歷一個List
,並且不同的List
類型,返回的Iterator
對象實現也是不同的,但總是具有最高的訪問效率。
Iterator
對象有兩個方法:boolean hasNext()
判斷是否有下一個元素,E next()
返回下一個元素。因此,使用Iterator
遍歷List
代碼如下:
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple", "pear", "banana");
for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
String s = it.next();
System.out.println(s);
}
}
}
有童鞋可能覺得使用Iterator
訪問List
的代碼比使用索引更復雜。但是,要記住,通過Iterator
遍歷List
永遠是最高效的方式。並且,由於Iterator
遍歷是如此常用,所以,Java的for each
循環本身就可以幫我們使用Iterator
遍歷。把上面的代碼再改寫如下:
public class Main {
public static void main(String[] args) {
List<String> list = List.of("apple", "pear", "banana");
for (String s : list) {
System.out.println(s);
}
}
}
參考:https://www.liaoxuefeng.com/wiki/1252599548343744/1265112034799552