subList是在日常中常用的方法,可以有一些细节可能一直不从注意到。
subList返回的是当前list的一个视图,如果起始位置相同则返回一个空列表。返回的子列表仅仅是原有的list的视图,对sublist的修改可以直接影响到原list。但是对原有List进行结构化进行修改后则subList则失效,再对其进行操作时会抛出一个java.util.ConcurrentModificationException异常
/** * * @author zhangwei_david * @version $Id: ListDemo.java, v 0.1 2014年8月17日 下午4:05:42 zhangwei_david Exp $ */ public class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); //sub=[A,B] List<String> sub = list.subList(0, 2); //清除A,B sub.clear(); System.out.println(list); //增加 D sub.add("D"); System.out.println(list); list.add("E"); try { System.out.println(sub); } catch (ConcurrentModificationException cme) { System.out.println("发生了预期异常"); } }
结果是:
[C] [D, C] 发生了预期异常