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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。