-1
我寫了一個程序,這是投擲ConcurrentUpdateException
,我無法理解這種行爲,它不應該通過任何異常,因爲我只有單線程工作,我沒有采取任何迭代器。排序後需要了解ConcurrentUpdateException嗎?
發生了什麼,排序?爲什麼它拋出這個異常?請解釋。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Double> list1 = new ArrayList<Double>(Arrays.asList(3., 2., 0., 1., 2.));
List<Double> subList = list1.subList(0, 3);
Collections.sort(list1);
System.out.println(subList.get(0));
}
}
你可以添加堆棧跟蹤嗎?什麼是「3.,2.,0.,1.,2.」? –
當我在本地執行代碼時,沒有例外。它只輸出'0.0' – SomeJavaGuy
正如@Sergey指出的那樣,subList()返回一個由原始列表支持的視圖。對原始列表進行任何結構更改都會使視圖未定義(例如,如果您希望子列表中原始列表的元素0到3,並且對原始列表進行排序,那麼元素將不再是原來的元素請求)。 ConcurrentUpdateException有點誤導,因爲它似乎表明一個多線程問題。相反,當對父列表進行修改的顯式測試是肯定的時,它會被拋出。 –