迭代器简介

Java 中的输入/输出与流

Alex Liu

Software Development Engineer

使用集合

  • 本视频其余部分的 HashSet 示例
import java.util.HashSet;

public class SampleHashSetData { public static void main(String[] args) { HashSet<String> fruits = new HashSet<>();
fruits.add("Apple"); fruits.add("Banana");
} }
{Apple, Banana}
Java 中的输入/输出与流

使用 For-Each 循环

  • For-Each 循环
    • 格式:for (type x: collection){}
    • 自动处理每个元素
    • 适用于多种集合:ListSetMap
  • 示例:使用集合 fruits[Apple, Banana]
for (String x : fruits) {
    System.out.println(x);
}
Apple
Banana
Java 中的输入/输出与流

用 Iterator 遍历集合

  • 使用 Iterator<>:支持 ListSetQueue
  • 导入 Iterator
import java.util.Iterator;

// 为示例集合 `fruits` 创建名为 `it` 的 `Iterator` 对象 Iterator<String> it = fruits.iterator(); // 使用 `.hasNext()` 判断是否有下一个元素 while (it.hasNext()) { // 使用 `.next()` 获取元素 System.out.print(it.next());}
Apple Banana
Java 中的输入/输出与流

用 Iterator 删除元素

  • 使用 .remove() 通过 Iterator 删除元素

$$

Iterator<String> it = fruits.iterator();
while (it.hasNext()) {
    String fruit = it.next();
    if (fruit.startsWith("A")) {
        // 若以 A 开头则删除
        it.remove();
        }
}
// 现在 fruits 只包含 "Banana"
Java 中的输入/输出与流

用 Iterator 删除元素(续)

  • 删除前:

    System.out.println(fruits);
    
    [Apple, Banana]
    
  • 删除后:

    System.out.println(fruits);
    
    [Banana]
    
  • 确保安全删除,避免 ConcurrentModificationException

表示安全删除的图标

Java 中的输入/输出与流

小结

  • For-Each 循环
    • 支持
      • ListArrayListLinkedList
      • SetHashSetTreeSetLinkedHashSet
      • QueuePriorityQueue
      • StackStack
    • 不支持
      • Map
      • 删除元素
  • Iterator
    • 支持
      • ListArrayListLinkedList
      • SetHashSetTreeSetLinkedHashSet
      • QueuePriorityQueue
      • StackStack
      • Map(需用 keySet().iteratorvalues().iteratorentrySet().iterator
      • 删除元素
Java 中的输入/输出与流

Passons à la pratique !

Java 中的输入/输出与流

Preparing Video For Download...