List、ArrayList执行subList报错:
Exception in thread "main" java.lang.IndexOutOfBoundsException: toIndex = 9
at java.util.SubList.<init>(AbstractList.java:622)
at java.util.RandomAccessSubList.<init>(AbstractList.java:775)
at java.util.AbstractList.subList(AbstractList.java:484)
at com.itzhimei.error.SubListTest.main(SubListTest.java:10)
问题很明显是下标越界,错误代码:
import java.util.Arrays;
import java.util.List;
public class SubListTest {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8);
List<Integer> list1 = list.subList(6, 9);
list1.forEach(System.out::println);
}
}
API使用的问题在于subList方法的第二个参数越界了,也就是超过List的实际大小。
list中实际只有8个元素,我这里输入了9,所以报错,subList并不会像String的截取方法,或者一些查找方法,输入负数或者超过范围的数据还具备其它含义,比如输入负数从后往前查找,List这里并不支持。
API方法:
public List<E> subList(int fromIndex,
int toIndex)
fromIndex – low endpoint (包含) of the subList
toIndex – high endpoint (不包含) of the subList