Enumeration
不會拋出ConcurrentModificationException
,爲什麼?Java枚舉與迭代器
請參閱下面的代碼。
public static void main(String[] args) {
Vector<String> v=new Vector<String>();
v.add("Amit");
v.add("Raj");
v.add("Pathak");
v.add("Sumit");
v.add("Aron");
v.add("Trek");
Enumeration<String> en=v.elements();
while(en.hasMoreElements())
{
String value=(String) en.nextElement();
System.out.println(value);
v.remove(value);
}
}
只打印:
Amit Pathak Aron
這是爲什麼這樣的行爲。我們可以說Enumerator
是線程安全的。
編輯:當使用迭代器時,它會在單線程應用程序中引發ConcurrentModificationException
。
public static void main(String[] args) {
Vector<String> v=new Vector<String>();
v.add("Amit");
v.add("Raj");
v.add("Pathak");
v.add("Sumit");
v.add("Aron");
v.add("Trek");
Iterator<String> it=v.iterator();
while(it.hasNext())
{
String value=(String) it.next();
System.out.println(value);
v.remove(value);
}
}
請檢查。
請仔細閱讀http://stackoverflow.com/questions/948194/different-using-java-util-enumeration-and-iterator – Garbage
是什麼這個問題的背景是什麼?您是否考慮在多線程環境中使用枚舉而不是迭代器? –
有更多的代碼我們應該知道嗎?在上面的示例代碼中沒有多線程,所以除非您有特別的理由來指責線程安全,否則我認爲您在這裏有點偏離 – posdef