【发布时间】:2017-04-19 18:51:23
【问题描述】:
我正在查看 List.subList() 方法。我想知道为什么下面的代码没有抛出 IndexOutOfBoundsException。
ArrayList<String> someList = new ArrayList<>();
someList.add("A");
someList.add("B");
someList.add("C");
someList.add("D");
someList.add("E");
someList.subList(5, 5);
文档说 subList 是 subList(fromIndex, toIndex),其中 fromIndex 包含在内。由于我的 list.size() 为 5,因此索引从 0 变为 4。所以如果 fromIndex 包含在内,不应该抛出异常吗?
来自文档:
fromIndex - low endpoint (inclusive) of the subList
toIndex - high endpoint (exclusive) of the subList
IndexOutOfBoundsException - for an illegal endpoint index value (fromIndex < 0 || toIndex > size || fromIndex > toIndex)
我理解这里的布尔表达式。但不应该是 (... || fromIndex >= toIndex) 吗?
我错过了什么?
【问题讨论】:
-
subList(0,0)呢? -
长度为0的列表没有问题,如果
fromIndex总是小于toIndex那是不可能的,你认为不应该允许用例吗? -
他们决定以这种方式构建规范,如果您有
fromIndex == toIndex,则允许空子列表。这是他们做出的明确设计决定,具有很多优势。 -
我想象一个类似 for 循环的情况:
int i = fromIndex; i < toIndex; i++,但循环永远不会运行,因为条件在开始时已经为假。不过,您可以随时检查来源以确保。 -
doesn't Java try to fetch the item- Java 在这里不获取任何东西。 subList 返回原始列表的视图。