谨慎使用subList
public static void main(String[] args) {
List<String> names = new ArrayList<String>(){{add("lucy");add("shancy");add("beibei");}};
List<String> a2 = new ArrayList<String>();
//sublist后会返回Sublist相当于是父list的视图,不能转换为arrayList
//ArrayList a1= names.subList(0,1);
a2= names.subList(0,1);
System.out.println(a2);
List a3= names.subList(1,3);
System.out.println(a3);
//wow,父list set后 子list set也set了
names.set(1,"222");
System.out.println(a3);//[222, beibei]
System.out.println(names);//[lucy, 222, beibei]
//wow,截取后set 原数据也set了
a3.set(0,"333");
System.out.println(a3);//[333, beibei]
System.out.println(names);//[lucy, 333, beibei]
a3.add("444");
System.out.println(a3);//[333, beibei, 444]
System.out.println(names);//[lucy, 333, beibei, 444]
//原数组新增数据报错.ConcurrentModificationException
names.add("55");
//names.remove("lucy");
System.out.println(a3);//如果去掉这句就不会报错;对父list的增加删除,会导致子列表的遍历、增加、删除报错
System.out.println(names);
}
1.sublist后会返回Sublist相当于是父list的视图,不能转换为arrayList
2.对父类子类huList做非结构性的修改(替换值),都会影响彼此数据
3.对子List做结构性修改(增、删),会影响到父类
4.对父List做结构性修改,会排除ConCurrentModificationException
在subList场景中,== 高度注意对原集合元素增加或删除,均会导致子列表的遍历、增加、删除产生ConCurrentModificationException异常 ==