Java中的Enumeration、迭代器和ListIterator的区别

Java中的Enumeration、迭代器和ListIterator的区别

Enumeration是一个接口。它在java的集合框架中被用来一个一个地检索元素。Enumeration是一个传统的接口,只适用于传统的类,如:Vector, HashTable, Stack等。它提供了一个单一方向的迭代。通过使用枚举,只能进行读取操作,而不能进行删除操作。

Enumeration对象可以通过调用Vector类中的 elements() 方法来创建。

// Here "v" is a vector object. enum is of
// type Enumeration interface and refers to "v"\nEnumeration enum = v.elements();

迭代器是一个通用的游标,可以应用于任何集合对象。它提供了一个单一方向的迭代。通过使用迭代器,可以执行读取和删除操作,但不能执行替换操作。当想要枚举所有集合框架中的元素时,就可以使用迭代器,如:Set、List、Queue、DeQue,以及Map接口的实现类。

迭代器对象可以通过调用集合接口中的 iterator() 方法来创建。

// Here "c" is any collection object. itr is of
// type Iterator interface and refers to "c"\nIterator itr = c.iterator();

ListIterator是所有三个游标中最强大的游标。ListIterator只适用于像ArrayList、LinkedList、Stack等列表实现类。ListIterator可以在前向和后向方向上进行遍历。通过使用ListIteartor,可以执行读取、移除和替换操作。当我们想要枚举列表中的元素时,必须使用ListIterator。

ListIterator 对象可以通过调用 list 接口中的 listIterator() 方法来创建。

// Here "l" is any list object. ltr is of
// type ListIterator interface and refers to "l"\nListIterator ltr = l.listIterator();

示例代码:

// A Java program to demonstrates the
// difference between Enumeration,
// Iterator, and ListIterator

import java.io.*;
import java.util.*;

class YiibaiDemo {

    public static void main(String args[])
    {

        // Creating a vector object
        Vector<Integer> v = new Vector<Integer>();

        // Adding elements to the vector object
        v.add(10);
        v.add(20);
        v.add(30);
        v.add(40);
        v.add(50);

        System.out.println("Enumeration: ");

        // Creating an Enumeration object
        Enumeration e = v.elements();

        // Checking the next element availability
        while (e.hasMoreElements()) {

            // Moving cursor to the next element
            int i = (Integer)e.nextElement();

            // Printing the element
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println();

        System.out.println("Iterator: ");

        // Creating Iterator object
        Iterator<Integer> itr = v.iterator();

        // Checking the next element availability
        while (itr.hasNext()) {

            // Moving cursor to the next element
            int i = (Integer)itr.next();

            // Checking if i == 10 then
            // remove the element
            if (i == 10)
                itr.remove();
        }
        System.out.println(v);
        System.out.println();

        System.out.println("ListIterator: ");

        // Creating ListIterator object
        ListIterator<Integer> ltr = v.listIterator();

        // Checking the next element availability
        while (ltr.hasNext()) {

            // Moving cursor to the next element
            int i = (Integer)ltr.next();

            // Performing add, remove, and
            // replace operation
            if (i == 20)
                ltr.remove();

            else if (i == 30)
                ltr.add(60);

            else if (i == 40)
                ltr.set(100);
        }

        System.out.println(v);
    }
}

运行结果:

Enumeration: 
10 20 30 40 50 

Iterator: 
[20, 30, 40, 50]

ListIterator: 
[30, 60, 100, 50]

显示枚举、迭代器和列表迭代器之间区别 –

属性 枚举 迭代器 ListIterator
可以在哪里应用? 枚举只能应用于传统的类。 迭代器可以应用于任何集合接口。 它可以应用于唯一的列表接口。
是一个遗留问题吗? 是(在1.0 V中引入)。 迭不是(在1.2 V中引入)。 不是(在1.2 V中引入)。
允许移动方向 单一方向,即只能在前进方向上遍历集合中的元素。 单向,即可以只在前进方向上遍历集合中存在的元素。 双向,即可以向前和向后两个方向遍历集合中的元素。
允许的操作 只能执行读操作。 可以执行读和删除操作。 可以执行读、删除、添加和替换操作。
怎样才能得到它? 通过调用向量类中的 elements() 方法。 通过调用任何集合接口中的 iterator() 方法。 通过调用列表接口中的 listIterator() 方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程