在Java中迭代列表的方法
1.簡介
遍歷列表的元素是程序中最常見的任務之一。
在本教程中,我們將回顧使用Java進行此操作的不同方法。我們將專注於按順序遍歷列表,儘管反向操作也很簡單。
2. for
循環
首先,讓我們回顧一些for
循環選項。
首先,為示例定義國家列表:
List<String> countries = Arrays.asList("Germany", "Panama", "Australia");
2.1。基本for
循環
最常見的迭代流控制語句是基本的for
循環。
for
循環定義用分號分隔的三種類型的語句。第一條語句是初始化語句。第二個定義終止條件。最後一條語句是update子句。
在這裡,我們只是使用整數變量作為索引:
for (int i = 0; i < countries.size(); i++) {
System.out.println(countries.get(i));
}
在初始化中,我們必須聲明一個整數變量以指定起點。此變量通常充當列表索引。
終止條件是一個表達式,在求值後返回一個布爾值,一旦該表達式求值為false,則循環結束。
update子句用於修改索引變量的當前狀態,增加或減少它直到終止點。
2.2。增強for
循環
增強的for
循環是一個簡單的結構,使我們可以訪問列表的每個元素。它類似於基本的for循環,但更具可讀性和緊湊性。因此,它是遍歷列表的最常用形式之一。
請注意,增強的for
循環比基本的for
循環更簡單:
for (String country : countries) {
System.out.println(country);
}
3.迭代器
Iterator
是一種設計模式,它為我們提供了遍歷數據結構的標準接口,而不必擔心內部表示形式。
這種遍歷數據結構的方式具有許多優點,其中我們可以強調,我們的代碼不依賴於實現。
因此,結構可以是二叉樹或雙向鍊錶,因為Iterator
將我們從執行遍歷的方式中抽像出來。這樣,我們可以輕鬆替換代碼中的數據結構而不會出現令人討厭的問題。
3.1。 Iterator
在Java中, Iterator
模式反映在java.util.Iterator
類中。它廣泛用於Java Collections
。 Iterator
有兩個關鍵方法,即hasNext()
和next()
方法。
在這裡,我們演示兩種用法:
Iterator<String> countriesIterator = countries.iterator();
while(countriesIterator.hasNext()) {
System.out.println(countriesIterator.next());
}
hasNext()
方法檢查list中是否還有任何元素。
next()
方法返回迭代中的下一個元素。
3.2。 ListIterator
ListIterator
允許我們以向前或向後的順序遍曆元素列表。
使用ListIterator
向前滾動列表遵循的機制類似於Iterator
所使用的機制。這樣,我們可以使用next()
方法將迭代器向前移動,並可以使用hasNext()
方法找到列表的末尾。
如我們所見, ListIterator
看起來與我們之前使用的Iterator
非常相似:
ListIterator<String> listIterator = countries.listIterator();
while(listIterator.hasNext()) {
System.out.println(listIterator.next());
}
4. forEach()
4.1。 Iterable.forEach()
從Java 8開始,我們可以使用forEach()
方法遍歷list的元素。此方法在Iterable
接口中定義,並且可以接受Lambda表達式作為參數。
語法非常簡單:
countries.forEach(System.out::println);
在forEach
函數之前,Java中的所有迭代器都處於活動狀態,也就是說,它們涉及一個for或while循環,該循環遍歷數據收集直到滿足特定條件。
通過在Iterable
接口中引入forEach
函數,所有實現Iterable
類都添加了forEach
函數。
4.2。 Stream.forEach()
我們還可以將值的集合轉換為Stream,並且可以訪問諸如forEach()
, map(),
或filter().
在這裡,我們演示了流的典型用法:
countries.stream().forEach((c) -> System.out.println(c));
5.結論
在本文中,我們展示了使用Java API遍歷列表元素的不同方法。其中,我們提到了for
循環,增強的for
循環, Iterator
, ListIterator
和forEach()
方法(包含在Java 8中)。
此外,我們還展示瞭如何在Streams
使用forEach()
方法。
最後,本文中使用的所有代碼都可以在我們的Github存儲庫中找到。