ایتراتور (Iterator)
ایتراتور (Iterator) مثل انگشت نمای کتاب است. روی مجموعه ها جابه جا می شود. «مجموعه (Collection)» یعنی گروهی از آیتم ها مثل لیست. با ایتراتور، آیتم ها را یکی یکی می خوانی. این روش امن و قابل کنترل است.
ایتراتور در جاوا چیست؟
ایتراتور شیئی از بسته java.util است. روی ArrayList و HashSet کار می کند. واژه iterate یعنی «چرخیدن بین آیتم ها».
گرفتن یک Iterator از کالکشن
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> cars = new ArrayList<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
Iterator<String> it = cars.iterator();
System.out.println(it.next());
}
}
حلقه با hasNext و next
while (it.hasNext()) {
System.out.println(it.next());
}
حذف امن هنگام پیمایش
متد remove() روی خود ایتراتور، حذف را امن می کند. پس اندازه لیست وسط حلقه، مشکل ساز نمی شود.
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(12);
numbers.add(8);
numbers.add(2);
numbers.add(23);
Iterator<Integer> it = numbers.iterator();
while (it.hasNext()) {
Integer i = it.next();
if (i < 10) {
it.remove();
}
}
System.out.println(numbers);
}
}
هشدار: حذف با حلقه for یا foreach درست عمل نمی کند. چون اندازه لیست همزمان تغییر می کند.
استفاده از var با Iterator
// Without var
Iterator<String> it = cars.iterator();
// With var
var it = cars.iterator();
نکته: var فقط نوشتن را کوتاه می کند. نوع واقعی همان Iterator<String> است.
سه گام تمرینی سریع
- یک ArrayList بساز و چند آیتم اضافه کن.
- با
iterator()یک ایتراتور بگیر و باnext()چاپ کن. - کمتر از عددی خاص را با
remove()حذف کن.
جمع بندی سریع
- ایتراتور جاوا پیمایش را امن می کند.
- hasNext و next پایه کار هستند.
- حذف امن فقط با it.remove انجام بده.
- ایتراتور جاوا برای همه کالکشن ها کاربردی است.