One - One Code All

Blog Content

java中list中的subList方法

Java   2017-03-29 19:50:43

List(对象的集合).subList(int fromIndex, int toIndex);


返回List中一部分对象的集合,即,返回的集合是List的子集合,并是以下标索引取值。

父集合List以fromIndex开始(包含),到toIndex结束(不包含)的部分为返回的子集合。



List list = new Arraylist<>();

List subList = list.subList(0, 5);


其中subList(0, 5)取得的是下标为0到4的元素,不包含下标为5的元素。


如果发生结构性修改的是返回的子list,那么原来的list的大小也会发生变化;


而如果发生结构性修改的是原来的list(不包括由于返回的子list导致的改变),那么返回的子list语义上将会是undefined。在AbstractList(ArrayList的父类)中,undefined的具体表现形式是抛出一个ConcurrentModificationException。


因此,如果你在调用了sublist返回了子list之后,如果修改了原list的大小,那么之前产生的子list将会失效,变得不可使用。



tips: 如何删除一个list的某个区段,比如删除list的第2-5个元素?


方法是: 可以利用sublist的幕后还是原来的list的这个特性,比如


list.subList(from, to).clear();

这样就可以了。



subList(l,r) 是左闭右开 例如:subList(1,3) 截取的是下标为1和2两个元素

subList() 返回对象是RandomAccessSubList不可序列化的实例化

切记不要这么写:list = (LinkedList) list.subList(0, 2);

否则程序会这样报复你:java.util.SubList cannot be cast to java.util.LinkedList

向下转型的前提是你要先是那个类


总结:list = new ArrayList(list.subList(0, 2)); 这么写总没错啦~



上一篇:IntelliJ IDEA导入已有的别的项目module打开多个项目且相互调用代码
下一篇:idea maven项目,右键项目,没有maven菜单了

The minute you think of giving up, think of the reason why you held on so long.