Java枚举 vs 迭代 vs For循环

3

(枚举,迭代器,循环)之间有什么区别?

在以下代码中,每个示例(枚举,迭代器,循环)都会获得相同的输出结果,但我需要知道它们之间的真正区别。是否有特定情况下应该使用其中之一而不能使用其他方法?其中一个方法是否比其他方法更具优势?


6
首先,在 Java SE 5 或更高版本的应用程序中,您不会使用“Vector”。 - Luiggi Mendoza
迭代器和枚举器在模糊化方面表现更佳。 - Hot Licks
如果你想要体会到更高层次抽象的威力,阅读这篇教程:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html - Solomon Slow
3个回答

3

枚举 VS 迭代器

迭代器主要用于非线程安全的集合。迭代器设计为在并发修改集合时失败,即如果一个集合被设计为单线程环境下使用,在多线程环境下被遍历时,如果线程在遍历时对其进行修改,则遍历会失败。

枚举仅用于线程安全的集合。当这样的集合在多线程环境下使用时,数据的一致性得到了保证,因此枚举不会失败。

为了更好地理解,您应该了解它们的内部工作原理......

一个集合及其迭代器和枚举之间具有更强的HAS-A关系,即双方的存在取决于彼此。


在实时情况下,应该使用哪一个? - Shruti sharma

0
如果可读性很重要。
更喜欢这个。
for (String s : listofStrings) 
    {
     ... 
    }

结束

for (Iterator<String> iter = listofStrings.iterator(); iter.hasNext(); )
{
 String s = iter.next();
 ...
}

请注意,如果您在迭代过程中需要删除元素,则需要使用迭代器。

例如,

List<String> list = getMyListofStrings(); 

    for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) 
    {
        String s = iter.next();
        if (someCondition) {
            iter.remove(); 
        }
    }

在列表中,你不能使用for(String s : myList)来删除一个元素。 同时请注意,在遍历数组时,foreach(或增强型for循环)只能用于获取元素,不能修改数组中的元素。


如果你通过普通的for(int i=...)反向迭代数组,你可以很好地删除元素。 - Hot Licks

0
关于枚举与迭代的问题,来自docs的解释如下:

在Java集合框架中,迭代器取代了枚举。迭代器与枚举有两个不同之处:迭代器允许调用者在迭代过程中从底层集合中删除元素,并具有明确定义的语义。方法名称也得到了改进。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接