CodeGym /Java Blog /Toto sisi /Java 迭代器
John Squirrels
等級 41
San Francisco

Java 迭代器

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

什麼是 Java 中的迭代器

什麼是 Java 中的迭代器?它是一種查看集合中每個元素的方法。通過集合,我們指的是Collection類中的任何東西。這包括:
  • 數組列表
  • 哈希集
  • 鏈接哈希集
  • 鍊錶
  • 優先隊列
  • 向量
  • 和許多其他人……
它還包括這些類的各種接口,例如SetListQueueDequeueSorted Set等等。 Iterator<E>是 Interface Iterator<E>類的公共接口方法。它是在 Java 1.2 中引入的,並取代了 Enumeration 作為一種檢查集合中順序元素的方法。

為什麼你不應該在 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 中如何使用迭代器遍歷MapHashMap呢?有四種很好的 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
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION