Java 迭代器java的接口集合允許我們訪問集合的元素並用於迭代集合中的元素(Map,List Interface或者放)。它有助於輕鬆檢索集合的元素並對每個元素執行操作。迭代器 是一個通用迭代器,因為它可以應用於任何 Collection 對象。我們隻能在向前使用迭代器的方向。使用ListIterator它擴展了Iterator,可以雙向遍曆。兩個都讀取並刪除可以通過迭代器接口執行操作。這包含在 Java JDK 1.2 中。唯一的 Enumeration 是 JDK 1.0 中包含的第一個迭代器。要使用迭代器,我們必須導入java.util包.
枚舉接口的局限性:
Java Collection 中使用 Iterator 接口代替 Enumeration。
迭代器接口的聲明
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迭代器的優點:
- 它不是遺留接口,可以遍曆整個集合,如 ArrayList 、 HashMap 、 TreeSet 、 HashSet 等。
- 它可用於任何 Java 集合,因此被稱為集合 API 的通用遊標。
- 支持讀取和刪除操作。
- 簡單且易於使用的方法名稱。
Java迭代器的局限性:
- 它不支持CRUD(創建、讀取、更新、刪除)操作中的創建和更新操作。
- 它僅支持uni-directional遍曆,即轉發方向。
- 與 Spliterator 相比,它不支持對大量數據進行更好的迭代。
- 它僅支持順序迭代,即它不支持並行迭代元素。
迭代器和枚舉的區別:
Iterator |
Enumeration |
---|---|
它是在 JDK 1.2 中引入的。 | 它是在 JDK 1.0 中引入的。 |
它是一個通用的 Cursor,即可以在任何 java 集合中使用。 | 它不是通用遊標。也就是說,我們隻能將它用於某些遺留類。 |
它支持讀取和刪除操作。 | 它僅支持讀取操作。 |
它有簡單的方法名稱。 | 它有很長的方法名稱。 |
人們可以在遍曆元素時進行任何修改。 | 遍曆時我們不能做任何修改。 |
不是遺留接口。可以遍曆整個集合,例如 ArrayList 、 HashMap 、 TreeSet 、 Vector etc.collections | 舊版接口。僅遍曆Vector、Hashtable。 |
方法:
方法 |
類型 | 解釋 |
---|---|---|
hasNext() | 布爾值 |
|
next() | E |
|
remove() | void |
|
forEachRemaining() | E |
|
相關用法
- Java Iterator轉Spliterator用法及代碼示例
- Java Iterator轉Stream用法及代碼示例
- Java Iterator轉List用法及代碼示例
- Java Iterator轉Iterable用法及代碼示例
- Java Iterator和Enumeration的區別用法及代碼示例
- Java Iterator和Spliterator的區別用法及代碼示例
- Java Iterable forEach()用法及代碼示例
- Java Iterable轉Collection用法及代碼示例
- Java Iterable轉Stream用法及代碼示例
- Java Iterable用法及代碼示例
- Java Integer divideUnsigned()用法及代碼示例
- Java Integer equals()用法及代碼示例
- Java Integer getInteger()用法及代碼示例
- Java Integer longValue()用法及代碼示例
- Java Integer max()用法及代碼示例
- Java Integer min()用法及代碼示例
- Java Integer numberOfLeadingZeros()用法及代碼示例
- Java Integer numberOfTrailingZeros()用法及代碼示例
- Java Integer parseInt()用法及代碼示例
- Java Integer parseUnsignedInt()用法及代碼示例
- Java Integer remainderUnsigned()用法及代碼示例
- Java Integer reverseBytes(int i)用法及代碼示例
- Java Integer toBinaryString()用法及代碼示例
- Java Integer toHexString()用法及代碼示例
- Java Integer toUnsignedLong()用法及代碼示例
注:本文由純淨天空篩選整理自goelshubhangi3118大神的英文原創作品 Iterator Interface In Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。