(Enumeration,Iterator,Loop)之间的区别是什么?
在下面的代码中,每个示例(Enumeration,Iterator,Loop)获得相同的输出] 但我需要知道它们之间真正的区别是什么?是否有特定情况我应该使用其中一个并且不能使用其他的?其中一个优于其他优势?
答案 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(或增强的)只能用于获取元素,您无法修改数组中的元素。