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);
}

相關文章
相關標籤/搜索