(枚举,迭代器,循环)之间有什么区别?
在以下代码中,每个示例(枚举,迭代器,循环)都会获得相同的输出结果,但我需要知道它们之间的真正区别。是否有特定情况下应该使用其中之一而不能使用其他方法?其中一个方法是否比其他方法更具优势?
(枚举,迭代器,循环)之间有什么区别?
在以下代码中,每个示例(枚举,迭代器,循环)都会获得相同的输出结果,但我需要知道它们之间的真正区别。是否有特定情况下应该使用其中之一而不能使用其他方法?其中一个方法是否比其他方法更具优势?
枚举 VS 迭代器
迭代器主要用于非线程安全的集合。迭代器设计为在并发修改集合时失败,即如果一个集合被设计为单线程环境下使用,在多线程环境下被遍历时,如果线程在遍历时对其进行修改,则遍历会失败。
枚举仅用于线程安全的集合。当这样的集合在多线程环境下使用时,数据的一致性得到了保证,因此枚举不会失败。
为了更好地理解,您应该了解它们的内部工作原理......
一个集合及其迭代器和枚举之间具有更强的HAS-A关系,即双方的存在取决于彼此。
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在Java集合框架中,迭代器取代了枚举。迭代器与枚举有两个不同之处:迭代器允许调用者在迭代过程中从底层集合中删除元素,并具有明确定义的语义。方法名称也得到了改进。