【问题标题】:Java Enumeration vs Iteration vs ForLoop [closed]Java枚举vs迭代器vs For循环[关闭]
【发布时间】:2014-10-28 05:19:13
【问题描述】:

(枚举、迭代器、循环)有什么区别??

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

【问题讨论】:

  • 首先,您不会在 Java SE 5 或更高版本的应用程序中使用 Vector
  • 迭代器和枚举器更擅长混淆。
  • 如果您想了解更高层次抽象的力量,请阅读本教程:docs.oracle.com/javase/tutorial/java/javaOO/…

标签: java loops iterator enumeration


【解决方案1】:

枚举与迭代器

迭代器主要用于非线程安全集合。迭代器的设计方式是每当对集合进行并发修改时它都会失败,即,如果在多线程环境中使用为单线程环境制作的集合并且由线程对其进行更改,而它正在被遍历然后遍历失败。

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

为了更好地理解你应该他们的内部工作............

集合及其迭代器和枚举之间具有更强的HAS-A关系,即双方的存在相互依赖。

【讨论】:

  • 实时在什么情况下应该使用哪个?
【解决方案2】:

关于枚举与迭代,来自docs

迭代器 在 Java 集合框架中取代枚举。 迭代器在两个方面不同于枚举:迭代器允许 调用者在 具有明确定义的语义的迭代。方法名称已 改进。

【讨论】:

    【解决方案3】:

    如果可读性很重要。

    更喜欢这个

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

    【讨论】:

    • 如果你向后遍历数组,使用普通的for(int i=...),你可以删除元素就好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2021-12-25
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多