使用枚举检索元素

时间:2014-02-25 17:16:42

标签: java collections enumeration

请参阅下面的代码,我正在使用枚举从向量和打印中重新元素。

package com.rajeev.enumeration;

import java.util.Enumeration;
import java.util.Vector;

public class Modification_On_Eumeration {
    public static void main(String[] args) {
        Vector<Integer> vector = new Vector<Integer>();
        vector.add(1);
        vector.add(2);
        System.out.println(vector);//here it is printing 12(ok)
        Enumeration<Integer> enumeration = vector.elements();
        while (enumeration.hasMoreElements()) {
            Integer integer = (Integer) enumeration.nextElement();
            System.out.print(integer);//why it is printing 123 instead of 12(reason ????)
        }
        vector.add(3);
        while (enumeration.hasMoreElements()) {
            Integer integer1 = (Integer) enumeration.nextElement();
            System.out.println(integer1);//why it is not printing ???
            System.out.println("why not printing");
        }
    }
}

output
------
[1, 2]
123
why not printing

第一个while循环是打印vector的元素但第二个while循环不是打印元素,为什么?以及第一个while循环如何能够显示123而不是12?我正在学习java帮助我..

5 个答案:

答案 0 :(得分:4)

您在Eumeration循环中仅使用一个while对象。

System.out.prinln(vector);行打印出[1, 2]

第一个while循环打印出12,因为那是当时唯一的2个元素。

您添加了第三个元素,但不会重新开始使用新的Enumeration。旧Enumeration现在看到另一个元素,因此它在同一行上打印3两个循环都会影响单行输出123

它还解释了为什么你看到

why not printing

仅打印一次。

答案 1 :(得分:1)

如果您修改代码以添加一些调试信息(您应该首先完成这些操作),您将看到正在发生的事情 - 一切正常并按预期工作:

    import java.util.Enumeration;
    import java.util.Vector;

    public class Modification_On_Eumeration {
        public static void main(String[] args) {
            Vector<Integer> vector = new Vector<Integer>();
            vector.add(1);
            vector.add(2);
            System.out.println("After adding 1 and 2 to the Vector<Integer>");
            System.out.println(vector);//here it is printing 12(ok)
            Enumeration<Integer> enumeration = vector.elements();
            while (enumeration.hasMoreElements()) {
                Integer integer = (Integer) enumeration.nextElement();
                System.out.println("in first loop before print");
                System.out.println(integer);//why it is printing 123 instead of 12(reason ????)
                System.out.println("in first loop after print");
            }
            vector.add(3);
            while (enumeration.hasMoreElements()) {
                Integer integer1 = (Integer) enumeration.nextElement();
                System.out.println(integer1);//why it is not printing ???
                System.out.println("why not printing");
            }
        }
    }

输出:

Executing the program....
$java -Xmx128M -Xms16M Modification_On_Eumeration

After adding 1 and 2 to the Vector<Integer>
[1, 2]
in first loop before print
1
in first loop after print
in first loop before print
2
in first loop after print
3
why not printing

答案 2 :(得分:1)

实际上第一个while循环正在打印12而第二个while循环正在打印(3为什么不打印)。你只需修改你的代码,如下所示。这样你就可以轻松区分。

public class Modification_On_Eumeration {
    public static void main(String[] args) {
        Vector<Integer> vector = new Vector<Integer>();
        vector.add(1);
        vector.add(2);
        System.out.println(vector);//here it is printing 12(ok)
        Enumeration<Integer> enumeration = vector.elements();
        while (enumeration.hasMoreElements()) {
            Integer integer = (Integer) enumeration.nextElement();
            System.out.print(integer);//why it is printing 123 instead of 12(reason ????)
        }
        System.out.println();
        System.out.println("first loop finished");
        vector.add(3);
        while (enumeration.hasMoreElements()) {
            Integer integer1 = (Integer) enumeration.nextElement();
            System.out.println(integer1);//why it is not printing ???
            System.out.println("why not printing");
        }
    }
}

答案 3 :(得分:0)

第一个while循环终止,因为enumeration已用尽元素。所以没有更多的元素可以用于迭代的下一个while循环。

您需要创建一个包含新值的新Enumeration。再次调用

刷新它
enumeration = vector.elements();

Enumeration只能使用一次。一旦它们耗尽,就必须重新创建它们。

还应注意,不建议使用VectorEnumeration,而应将其替换为ArrayListIterator

来自http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html

  

此接口的功能由Iterator接口复制。此外,Iterator添加了一个可选的删除操作,并且具有更短的方法名称。新实现应该考虑使用Iterator而不是Enumeration。

http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html

  

从Java 2平台v1.2开始,该类被改进以实现List接口,使其成为Java Collections Framework的成员。与新的集合实现不同,Vector是同步的。如果不需要线程安全实现,建议使用ArrayList代替Vector。

答案 4 :(得分:-1)

您需要从向量中创建一个新的枚举,因为您已经使用了迭代所使用的枚举。您无法在第一个循环中看到元素3,因为它尚未添加。

    Enumeration<Integer> enumeration = vector.elements();
    while (enumeration.hasMoreElements()) {
        Integer integer = (Integer) enumeration.nextElement();
        System.out.print(integer);//why it is printing 123 instead of 12(reason ????)
    }
    vector.add(3);
    enumeration = vector.elements();
    while (enumeration.hasMoreElements()) {