List、ArrayList执行subList报错:IndexOutOfBoundsException

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