最近突然看到截取List的这个方法,正好项目中进行假分页可以专用道这个方法,下面来总结一下。
List<E> subList(int formIndex,int toIndex);
一、注意:
1、该方法返回的是父list的一个视图,从fromIndex(包含),到toIndex(不包含)。fromIndex=toIndex 表示子list为空
2、父子list做的非结构性修改(不涉及到list的大小改变的修改):
都会影响到彼此
3、结构性修改(改变了list大小的修改):
子list的所有操作都会反映到父list上。但父list的修改将会导致返回的子list失效。
4、删除list中的某段数据:list.subList(from,to).clear()
二、实践:
2.1非结构性修改
List<String> list = new ArrayList<>();
list.add("a");
// 使用构造器创建一个包含list的列表list1
List<String> list1 = new ArrayList(list);
// 使用subList生成与list相同的列表list2
List<String> list2 = list.subList(0, list.size());
list2.set(0,"将a修改后");
// list.set(0,"将a修改后");
System.out.println(list.equals(list1));
System.out.println(list.equals(list2));
2.2结构性修改
2.2.1结构性修改-子list操作
List<String> list = new ArrayList<>();
list.add("a");
// 使用构造器创建一个包含list的列表list1
List<String> list1 = new ArrayList(list);
// 使用subList生成与list相同的列表list2
List<String> list2 = list.subList(0, list.size());
list2.add("b");
System.out.println(list.equals(list1));
System.out.println(list.equals(list2));
可以发现,list2为list的子list,当list2发生结构性修改(list2.add("b"))后,父list也发生相应改变,所以返回结果为false和true
2.2.2结构性修改-父list操作(会报错)
List<String> list = new ArrayList<>();
list.add("a");
// 使用构造器创建一个包含list的列表list1
List<String> list1 = new ArrayList(list);
// 使用subList生成与list相同的列表list2
List<String> list2 = list.subList(0, list.size());
list.add("b");
System.out.println(list.equals(list1));
System.out.println(list.equals(list2));
项目中的应用:分页问题