Iterator و ListIterator
برای دسترسی، ویرایش و حذف هر یک از عناصر یک کلکسیون ابتدا باید عنصر مورد نظر را پیدا کنیم. برای این کار لازم است که در میان عناصر بگردیم. سه راه برای گردش در میان عناصر یک کلکسیون یا مجموعه وجود دارد :
- با استفاده از رابط Iterator
- با استفاده از رابط ListIterator
- با استفاده از حلقه foreach
دسترسی به عناصر مجموعه با استفاده از رابط Iterator
رابط Iterator یک مجموعه یا کلکسیون را رو به جلو پیمایش کرده و شما را قادر می سازد که عناصر را حذف و ویرایش کنید. هر کلکسیون برای ایجاد یک پیمایشگر دارای متدی به نام ()iterator می باشد. وقتی یک شیء از Iterator می سازیم می توانیم به متدهای آن که در جدول زیر آمده اند نیز دست یابیم :
متد | توضیح | |
hasNext | چک می کند که آیا عنصری بعد از عنصر فعلی وجود دارد یا نه؟ | |
next | عنصر بعدی را بر می گرداند. |
به مثال زیر توجه کنید :
package myfirstprogram; import java.util.*; public class MyFirstProgram { public static void main(String[] args) { ArrayList<String> arraylist = new ArrayList<>(); arraylist.add("A"); arraylist.add("B"); arraylist.add("C"); arraylist.add("D"); Iterator iterator = arraylist.iterator(); //Declaring Iterator while(iterator.hasNext()) { System.out.println(iterator.next()); } } }
A B C D
مهمترین خط کد بالا خط زیر است :
Iterator iterator = arraylist.iterator();
در کد بالا با فراخوانی متد ()iterator از کلکسیونمان که در اینجا arraylist است آن را به مجموعه ای قابل پیمایش توسط Itrator می کنیم و سپس با استفاده از متدهای این رابط آن را پیمایش می کنیم.
دسترسی به عناصر مجموعه با استفاده از رابط ListIterator
رابط ListIterator یک مجموعه را با استفاده از متدهایی که در جدول زیر آمده اند، هم رو به جلو و هم رو به عقب پیمایش می کند :
متد | توضیح | |
hasNext | چک می کند که آیا عنصری بعد از عنصر فعلی وجود دارد یا نه؟ | |
next | عنصر بعد از عنصر فعلی را بر می گرداند. | |
hasPrevious | چک می کند که آیا عنصری قبل از عنصر فعلی وجود دارد یا نه؟ | |
previous | عنصر قبل از عنصر فعلی را بر می گرداند. |
این رابط فقط در مجموعه هایی قابل دسترسی است که رابط List را پیاده سازی کرده باشند :
package myfirstprogram; import java.util.*; public class MyFirstProgram { public static void main(String[] args) { ArrayList<String> arraylist = new ArrayList<>(); arraylist.add("A"); arraylist.add("B"); arraylist.add("C"); arraylist.add("D"); ListIterator listiterator = arraylist.listIterator(); while(listiterator.hasNext()) //In forward direction { System.out.println(listiterator.next()); } System.out.println("\n\n"); while(listiterator.hasPrevious()) //In backward direction { System.out.println(listiterator.previous()); } } }
A B C D D C B A
دسترسی به عناصر مجموعه با استفاده از حلقه foreach
Foreach نسخه ای از حلقه for است که می تواند در میان عناصر یک مجموعه گردش کند. از این حقله نمی توان برای ویرایش عناصر یک مجموعه استفاده کرد. حلقه foreach می تواند در میان هر مجموعه ای از اشیاء که رابط Iterable را پیاده سازی کرده باشد گردش کند :
package myfirstprogram; import java.util.*; public class MyFirstProgram { public static void main(String[] args) { ArrayList<String> arraylist = new ArrayList<>(); arraylist.add("A"); arraylist.add("B"); arraylist.add("C"); arraylist.add("D"); for(String str : arraylist) { System.out.println(str); } } }
A B C D