Iterator و ListIterator

برای دسترسی، ویرایش و حذف هر یک از عناصر یک کلکسیون ابتدا باید عنصر مورد نظر را پیدا کنیم. برای این کار لازم است که در میان عناصر بگردیم. سه راه برای گردش در میان عناصر یک کلکسیون یا مجموعه وجود دارد :

  1. با استفاده از رابط Iterator
  2. با استفاده از رابط ListIterator
  3. با استفاده از حلقه 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