你好!在今天的課程中,我們將討論 Java 迭代器。想像一下,你去圖書館,想找一本特別的書。你怎麼做呢?如果是非小說類作品,那就是杜威十進制系統。如果是小說,則按姓氏的字母順序排序。無論你在找什麼,在某個時候,你必須一次一本地翻閱這些書,直到找到你要找的東西。每當您在 Java 中擁有一組東西時,無論它是存儲在 Array 、 ArrayList 、 Queue還是List 中,您如何找到特定的值?在某些時候,您必須一次一個地檢查每個元素。這就是 Java 迭代器的用途。

什麼是 Java 中的迭代器
什麼是 Java 中的迭代器?它是一種查看集合中每個元素的方法。通過集合,我們指的是Collection類中的任何東西。這包括:- 數組列表
- 哈希集
- 鏈接哈希集
- 鍊錶
- 優先隊列
- 向量
- 和許多其他人……
為什麼你不應該在 Java 中使用 For 循環作為迭代器
每個人都被教導在 Java 中遍歷集合的第一種方法是 for 循環。它看起來像這樣:
class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
輸出將是一個列表,內容如下:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
這確實有它的用處,但是如果集合不在基於索引的系統中存儲元素會發生什麼?例如,Set通常沒有順序。因此,建議放棄在 Java 中使用 for 循環作為迭代器的做法,而改用Iterator<E>類。這裡有一些java迭代器的例子。
如何在 Java 中使用迭代器
下面是一些如何在 Java 中使用迭代器的例子。使用迭代器類時,可以通過三種方式遍歷集合。您可以使用while()循環、for()循環和forEach()循環。請注意,這個 for 循環與我們之前談到的那個不同。這是三個不同的 java 迭代器示例。首先,讓我們設置要迭代的 Collection 。
import java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
這是一個簡單的集合,由我們加載了四個項目的ArrayList組成。現在讓我們看看使用 Iterator 類遍歷ArrayList的三種方法。
while() 循環
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
此while()循環使用Iterator類的.hasNext()布爾方法來檢查是否存在未來元素。如果前提條件為真,則繼續。如果它返回 false,則循環結束。這裡的關鍵部分是 .hasNext ()和.next()方法都對第一個元素進行初始檢查。如果Collection為空且沒有第一個元素,則該方法會為.hasNext()返回 false 並將為.next()方法拋出NoSuchElementException。
For循環
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
這看起來像是更傳統的 for 循環。它使用.hasNext()方法作為條件檢查和更改部分。初始化是對迭代器的調用。
對於:每個循環
for (String s : example) {
System.out.println("Element Value= " + s);
}
For :Each循環是for 循環,但如果您不知道如何閱讀它,可能會有些混亂。For:Each循環的語法是for (data_type variableName : collectionName){ body}。這個for:each循環確實有幾個缺點。首先,它只能單向遍歷集合。其次,您必須遍歷每個元素。你不能跳過其中任何一個。但作為 Java 中方便的列表迭代器,它是最佳選擇。從好的方面來說,for:each循環非常容易閱讀,一旦了解它就很難出錯。如果您想知道三個迭代器循環的輸出是什麼,它們都是一樣的:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
如何在 Java For Maps 中使用迭代器
Map 是一種流行的數據存儲方式,但是因為它們沒有擴展Collection,所以您不能使用以前的迭代器直接遍歷 Map。那麼在 Java 中如何使用迭代器遍歷Map和HashMap呢?有四種很好的 Java 映射迭代器方法。我們將單獨介紹它們。首先,讓我們加載具有一系列值的地圖。
import java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
Java Hashmap 迭代器方法:forEach(action)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
此方法使用 lambda 表達式進行迭代。lambda 運算符是forEach()方法,主體打印出值。這使用多參數運算符。這是 Java 8 中映射迭代器最快、最乾淨的方法。
Java Hashmap 迭代器方法:For:Each() 循環
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
這使用For:Each語法調用entrySet()方法以返回一個以鍵和值作為其元素的集合。此外,在使用.Entry()方法時,對象僅在發生此迭代時為真。
Java Hashmap 迭代器方法:Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
此方法再次將Map轉換為集合以使用Collections Iterator 和方法。對於這三個迭代器方法,返回值如下所示:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
這個以不同的方式返回元素。它將首先按順序返回所有鍵,然後返回所有值:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
GO TO FULL VERSION