Java中subList的坑

java.util.List中有一个subList方法,用来返回一个list的一部分的视图。 之因此说是视图,是由于实际上,返回的list是靠原来的list支持的。java

经过查看源代码咱们能够看到subList返回的是一个new SubList()的对象,可是在该对象中保留了操做数组的引用,以及要须要读取的fromIndex,和 toIndex.数组

第一坑:code

    1.经过对原List或者subList出来的List中的元素进行修改,那么二者会相互影响。即:修改他们中的任何一个都会影响另外一个。对象

    2.若是对原List进行元素的添加或者删除操做,那么会让子list语义上将会是undefined,在AbstractList(ArrayList的父类)中,undefined的具体表现形式是抛出一个ConcurrentModificationException。内存

第二坑:io

    若是subList出来的List从新赋值给原List,那么这样会形成内存溢出。class

List<String> list = new ArrayList();
for(int i=0;i<10000;i++){
  list.add(i+"");
  int endIndex = list.size() > 3 ?3 :list.size();
  list = list.subList(0,endIndex);
}

相关文章
相关标签/搜索