當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Iterator用法及代碼示例


Java 迭代器java的接口集合允許我們訪問集合的元素並用於迭代集合中的元素(Map,List Interface或者)。它有助於輕鬆檢索集合的元素並對每個元素執行操作。迭代器 是一個通用迭代器,因為它可以應用於任何 Collection 對象。我們隻能在向前使用迭代器的方向。使用ListIterator它擴展了Iterator,可以雙向遍曆。兩個都讀取並刪除可以通過迭代器接口執行操作。這包含在 Java JDK 1.2 中。唯一的 Enumeration 是 JDK 1.0 中包含的第一個迭代器。要使用迭代器,我們必須導入java.util包.

枚舉接口的局限性:

Java Collection 中使用 Iterator 接口代替 Enumeration。

  • 枚舉是 不是通用迭代器,用於遺留類,例如Vector,哈希表僅有的。
  • 迭代器允許調用者在迭代元素期間從給定集合中刪除元素。
  • 隻能進行正向迭代枚舉.

迭代器接口的聲明

public interface Iterator<E>

E - 此迭代器返回的元素的類型

Subinterfaces of Iterator

事件迭代器:

public interface EventIterator extends Iterator<Event>

EventIterators 是不可修改。

方法:nextEvent() 返回事件集中的下一個事件。

列表迭代器<E>:

public interface ListIterator<E> extends Iterator<E>

列表的迭代器,允許向前或向後遍曆列表或在迭代期間修改列表並獲取迭代器的當前位置。 ListIterator 沒有當前元素。

PrimitiveIterator<T,T_CONS>、PrimitiveIterator.OfInt、PrimitiveIterator.OfLong

實施類:

  • BeanContextSupport.BCSIterator
  • EventReaderDelegate
  • Scanner

示例:迭代器的實現

集合框架中的所有類都提供iterator() 方法,該方法返回迭代器的實例以迭代該集合中的元素。

Java


// Java program to show the usage of Iterator() 
import java.util.Iterator; 
import java.util.LinkedList; 
import java.util.List; 
public class JavaIteratorExample1 { 
    public static void main(String[] args) 
    { 
          // create a list 
        List<String> list = new LinkedList<>(); 
        list.add("Welcome"); 
        list.add("to"); 
        list.add("GFG"); 
  
        System.out.println("The list is given as : "
                           + list); 
            
          // get the iterator on the list 
        Iterator<String> itr = list.iterator(); 
  
        // Returns true if there are more number of 
        // elements. 
        while (itr.hasNext()) { 
            // Returns the next element. 
            System.out.println(itr.next()); 
        } 
  
        // Removes the last element. 
        itr.remove(); 
        System.out.println( 
            "After the remove() method is called : "
            + list); 
    } 
}
輸出
The list is given as : [Welcome, to, GFG]
Welcome
to
GFG
After the remove() method is called : [Welcome, to]

ArrayList 迭代器示例

Java


// Java program to iterate over an arraylist 
// using Iterator 
import java.util.*; 
class GFG { 
    public static void main(String[] args) 
    { 
        // initializing ArrayList 
        List<Integer> numbers 
            = Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80); 
  
        // Looping ArrayList using Iterator 
        Iterator it = numbers.iterator(); 
        while (it.hasNext()) 
            System.out.print(it.next() + " "); 
    } 
}
輸出
10 20 30 40 50 60 70 80 

開發自定義類迭代器

要為用戶定義/自定義類提供類似的函數,我們應該遵循以下步驟:

  • 定義一個自定義類。
  • 將集合類定義為此自定義類。
  • 集合類應該導入java.util打包並實施可迭代的接口。
  • 該集合類現在應該提供 Iterable 接口的方法 iterator() 的實現。

開發自定義類的示例代碼:

Java


// java program to show the creation of 
// custom class that implements iterable interface 
import java.util.*; 
import java.io.*; 
class Employees implements Iterable { 
  
    List<String> str = null; 
    public Employees() 
    { 
        str = new ArrayList<String>(); 
        str.add("practice"); 
        str.add("geeks"); 
        str.add("for"); 
        str.add("geeks"); 
        str.add("to"); 
        str.add("learn"); 
        str.add("coding"); 
    } 
  
    // if we are implementing Iterable interface, the we 
    // need to define the iterator() method of Iterable 
    // interface 
    @Override public Iterator<String> iterator() 
    { 
        return str.iterator(); 
    } 
} 
  
public class EmployeesTester { 
    public static void main(String[] args) 
    { 
        Employees emps = new Employees(); 
        for (String st : emps.str) { 
            System.out.println(st); 
        } 
    } 
}
輸出
practice
geeks
for
geeks
to
learn
coding

使用remove()方法從集合中刪除項目

  • 它刪除迭代器返回的集合的最後一個元素。
  • 如果迭代正在進行並且同時底層集合被修改,那麽通過調用remove()方法,迭代器將拋出並發修改異常。

Java


// java program to remove() 
// elements from a collection 
  
import java.util.ArrayList; 
import java.util.Iterator; 
  
public class MyClass { 
    public static void main(String[] args) 
    { 
          // create a list of Integers 
        ArrayList<Integer> numbers 
            = new ArrayList<Integer>(); 
        numbers.add(12); 
        numbers.add(8); 
        numbers.add(2); 
        numbers.add(23); 
            
          // get the iterator on the list 
        Iterator<Integer> it = numbers.iterator(); 
        while (it.hasNext()) { 
                
              // gives the next element 
              // and iterator moves to next  
              // element 
            Integer i = it.next(); 
  
            if (i < 10) { 
                    
                  // removes the current element 
                it.remove();  
            } 
        } 
        System.out.println(numbers); 
    } 
}
輸出
[12, 23]

迭代器 forEachRemaining() 示例

Java


// Java program to show the usage of 
// Iterator forEachRemaining() 
import java.util.*; 
class GFG { 
    public static void main(String[] args) 
    { 
        //  initializing ArrayList 
        List<Integer> numbers 
            = Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80); 
  
        numbers.iterator().forEachRemaining( 
            System.out::println); 
    } 
}
輸出
10
20
30
40
50
60
70
80

Java迭代器的優點:

  1. 它不是遺留接口,可以遍曆整個集合,如 ArrayListHashMapTreeSetHashSet 等。
  2. 它可用於任何 Java 集合,因此被稱為集合 API 的通用遊標。
  3. 支持讀取和刪除操作。
  4. 簡單且易於使用的方法名稱。

Java迭代器的局限性:

  1. 它不支持CRUD(創建、讀取、更新、刪除)操作中的創建和更新操作。
  2. 它僅支持uni-directional遍曆,即轉發方向。
  3. Spliterator 相比,它不支持對大量數據進行更好的迭代。
  4. 它僅支持順序迭代,即它不支持並行迭代元素。

迭代器和枚舉的區別:

Iterator

Enumeration

它是在 JDK 1.2 中引入的。 它是在 JDK 1.0 中引入的。
它是一個通用的 Cursor,即可以在任何 java 集合中使用。 它不是通用遊標。也就是說,我們隻能將它用於某些遺留類。
它支持讀取和刪除操作。 它僅支持讀取操作。
它有簡單的方法名稱。 它有很長的方法名稱。
人們可以在遍曆元素時進行任何修改。 遍曆時我們不能做任何修改。
不是遺留接口。可以遍曆整個集合,例如 ArrayListHashMapTreeSetVector etc.collections 舊版接口。僅遍曆VectorHashtable

方法:

方法

類型 解釋
hasNext() 布爾值
  • 如果迭代有更多元素,那麽它返回真.
  • 如果迭代器遍曆完所有元素,則返回 false
next() E
  • 它返回下一個元素的迭代。
  • 它拋出NoSuchElementException如果迭代器沒有更多元素。
remove() void
  • 刪除最後一個元素迭代器返回的集合。
  • 如果迭代正在進行並且同時底層集合被修改,那麽通過調用remove()方法,迭代器將拋出一個並發修改異常。
forEachRemaining() E
  • 它為每個執行給定的操作剩餘元素直到處理完所有元素。
  • 如果指定了順序,則按迭代順序執行操作。
  • 它拋出NullPointerException如果操作為空。


相關用法


注:本文由純淨天空篩選整理自goelshubhangi3118大神的英文原創作品 Iterator Interface In Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。