当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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