Вступ до ітераторів

Ввід/вивід і потоки в 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){}
    • Автоматично обробляє кожен елемент
    • Працює з багатьма колекціями: List, Set, Map тощо
  • Приклад: використайте прикладний набір fruits: [Apple, Banana].
for (String x : fruits) {
    System.out.println(x);
}
Apple
Banana
Ввід/вивід і потоки в Java

Обхід колекції за допомогою Iterator

  • Використовуйте Iterator<>: підтримує List, Set, Queue тощо
  • Імпортуйте клас Iterator
import java.util.Iterator;

// Створіть об'єкт `Iterator` з назвою `it` для прикладного набору `fruits` 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 цикл
    • Підтримує
      • List (ArrayList,LinkedList)
      • Set (HashSet,TreeSet,LinkedHashSet)
      • Queue (PriorityQueue)
      • Stack (Stack)
    • Не підтримує
      • Map
      • Видалення елементів
  • Iterator
    • Підтримує
      • List (ArrayList,LinkedList)
      • Set (HashSet,TreeSet,LinkedHashSet)
      • Queue (PriorityQueue)
      • Stack (Stack)
      • Map (слід використовувати keySet().iterator, values().iterator або entrySet().iterator)
      • Видалення елементів
Ввід/вивід і потоки в Java

Давайте потренуємось!

Ввід/вивід і потоки в Java

Preparing Video For Download...