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