創建list集合添加元素sublist()得到子集,為什麼不能對父集進行增刪等操作??運行拋出concurrentmodification
出現這個異常存在的原因是在遍歷集合的同時,又對集合元素進行修改導致的。比如這段代碼:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
List<String> subList = list.subList(1, 2);
list.add("to");
System.out.println(subList);
}
分析下這個問題產生的原因:ArrayList的實現是基於數組的,它維護了一個Object[]數組對象。
跟蹤下subList方法的源碼就知道,subList操作返回的新的List,它的數組引用跟原來的父列表是同一個,只是索引的起止值不同罷了。
所以上述代碼先對父類集合add操作了,然後又遍歷子集合對象時,就會拋出上述異常了。
至於上述異常產生的原因,參考一樓。即遍歷集合的同時又對集合進行修改的話,就會報java.util.ConcurrentModificationException異常了。