TreeSetset = new TreeSet();
set.add("one1");
set.add("two1");
set.add("three1");
for(Iterator it =set.iterator();it.hasNext();)
{
String str = it.next();
System.out.println(str);
if(str.equals("three1")){
set.remove(str);
}
}
我看一本書上面說當遍歷到最後一個元素時,集合的遍歷已經完成。此時操作Set集合不會引起ConcurrentModificationException異常,但為什麼我輸了一下就發生了這個異常
使用TreeSet要求集合元素必須是可以比較大小的,保證Set裡添加的元素後是“大小排序”的。
比較大小主要有兩種方式:
A. 自然排序。所有集合元素要實現Comparable接口。
B. 定制排序。要求創建TreeSet時,提供一個Comparator對象(負責比較元素大小)。
這裡set裡面的元素為String類型,而String是實現了Comparable接口的,所以這裡可以直接用,很顯然o<t, h<w;所以打印結果:one1、three1、two1; 而你在遍歷迭代過程中刪除了中間元素three1,導致迭代器在遍歷最後一個元素時拋出異常。
個人建議:除非有特殊需要,否則最好不要在迭代的過程中刪除元素,以免引發不必要的異常。