Java Enumeration vs Iterator vs For Loop

时间:2014-09-03 16:01:39

标签: java loops iterator enumeration

(Enumeration,Iterator,Loop)之间的区别是什么?

在下面的代码中,每个示例(Enumeration,Iterator,Loop)获得相同的输出] 但我需要知道它们之间真正的区别是什么?是否有特定情况我应该使用其中一个并且不能使用其他的?其中一个优于其他优势?

3 个答案:

答案 0 :(得分:2)

枚举VS迭代器

Iterator主要用于非线程安全集合。 Iterator的设计方式是,只要对集合进行并发修改,就会失败,即如果在多线程环境中使用针对单个线程环境的集合,并且线程对它进行了更改。它正在遍历,然后遍历失败。

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

为了更好地理解你应该进行内部工作........

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

答案 1 :(得分:0)

关于Enumation vs Iteration,来自docs

  

迭代   取代了Java Collections Framework中的Enumeration。   迭代器在两个方面与枚举不同:迭代器允许   调用者在调用期间从基础集合中删除元素   具有明确定义的语义的迭代。方法名称已经   改善。

答案 2 :(得分:0)

如果可读性很重要。

首选

for (String s : listofStrings) 
    {
     ... 
    }

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

请注意,如果您需要在迭代时删除元素,则需要使用Iterator。

例如,

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(或增强的)只能用于获取元素,您无法修改数组中的元素。