<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 外部與內部迭代器 原文:http://zetcode.com/java/externalinternaliterator/ Java 外部和內部迭代器展示了 Java 中外部和內部迭代器之間的區別。 迭代器是使程序員能夠遍歷列表和映射之類的容器的對象。 ## 迭代器類型 迭代器有兩種類型:外部和內部。 外部迭代器是主動的,內部迭代器是被動的。 當客戶端(即程序員)控制迭代時,該迭代器稱為外部迭代器。 當迭代器控制它時,它稱為內部迭代器。 通常,建議使用內部迭代器而不是外部迭代器。 內部迭代不易出錯,更易讀,并且需要更少的代碼。 另一方面,外部迭代器有時更靈活。 例如,在循環中對兩個集合進行操作時。 ## Java 外部迭代器示例 以下示例顯示了外部迭代器的用法。 `JavaExternalIterationEx.java` ```java package com.zetcode; import java.util.List; public class JavaExternalIterationEx { public static void main(String[] args) { List<String> words = List.of("hello", "sky", "there", "den", "sky"); for (String word: words) { System.out.printf("The word %s has %d characters%n", word, word.length()); } } } ``` 在示例中,我們使用外部迭代器遍歷單詞列表,并以字符形式顯示其元素及其大小。 ```java The word hello has 5 characters The word sky has 3 characters The word there has 5 characters The word den has 3 characters The word sky has 3 characters ``` 這是輸出。 ### `ConcurrentModificationException` 當我們使用帶有增強型`for`循環的外部迭代并修改集合的元素時,我們可能會收到`ConcurrentModificationException`。 `JavaExternalIterationEx2.java` ```java package com.zetcode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class JavaExternalIterationEx2 { public static void main(String[] args) { List<String> words = new ArrayList<>(Arrays.asList("pen", "pencil", "sky", "blue", "sky", "dog")); for (String word: words) { if ("sky".equals(word)) { words.remove(word); } } System.out.println(words); } } ``` 在該示例中,我們要從列表中刪除所有等于`"sky"`的單詞。 這是出于演示目的; 從 Java8 開始,我們可以輕松地使用`removeIf()`方法刪除元素:`words.removeIf(e -> "sky".equals(e));` ```java Exception in thread "main" java.util.ConcurrentModificationException ``` 運行示例將導致`ConcurrentModificationException`。 Java 工作中其他形式的外部迭代。 ```java Iterator<String> iter = words.iterator(); while (iter.hasNext()) { String s = iter.next(); if ("sky".equals(s)) { iter.remove(); } } ``` 該示例可以在帶有`while`循環的老式迭代中正常運行。 ```java for (int i=words.size() - 1; i>=0; i--) { if ("sky".equals(words.get(i))) { words.remove(i); } } ``` 它也可以與傳統的`for`循環一起使用。 還要注意,在這種情況下,為每個循環使用并不會導致所有語言的錯誤。 例如,Python 3 或 Perl 6 可以正常工作。 另一方面,JavaScript 和 C++ 也會出錯。 `extit.py` ```java #!/usr/bin/python3 words = ["pen", "pencil", "dog", "sky", "blue", "sky"] print(len(words)) for word in words: if word == "sky": words.remove(word) print(words) print(len(words)) ``` 這是 Python 3 中的等效代碼。可以正常工作。 ## Java 內部迭代器示例 在以下示例中,我們使用內部迭代器。 `JavaInternalIteratorEx.java` ```java package com.zetcode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class JavaInternalIteratorEx { public static void main(String[] args) { List<String> words = List.of("hello", "sky", "there", "den", "sky"); words.stream().forEach(e -> System.out.printf("The word %s has %d characters %n", e, e.length())); } } ``` 該示例遍歷列表的所有元素,并打印它們及其大小。 `JavaInternalIteratorEx2.java` ```java package com.zetcode; import java.util.List; import java.util.stream.Collectors; public class JavaInternalIteratorEx2 { public static void main(String[] args) { List<String> words = List.of("hello", "sky", "there", "den", "sky"); List<String> words2 = words.stream().filter(e -> !"sky".equals(e)) .collect(Collectors.toList()); System.out.println(words2); } } ``` 使用現代函數式 Java,我們展示了如何創建一個不包含`"sky"`一詞的新不可變列表。 ```java [hello, there, den] ``` 這是輸出。 在本教程中,我們討論了 Java 的內部和外部迭代器。 您可能也對相關教程感興趣: [Java 復制文件](/java/copyfile/), [Java 創建目錄](/java/createdirectory/), [Java 文件大小](/java/filesize/),[用 Java 創建文件](/java/createfile/) ,[用 Java 讀取文本文件](/articles/javareadtext/), [Apache FileUtils 教程](/java/fileutils/), [Java Swing 教程](/tutorials/javaswingtutorial/)和 [Java 教程](/lang/java/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看