【发布时间】:2016-09-14 18:34:02
【问题描述】:
因此,如果我有一个大小为 3 的列表,假设为 [0,1,2],我尝试访问索引为 3 (list.get(3)) 的列表元素,显然它会因越界异常而失败.但是,使用 subList 方法,如果我尝试:
list.subList(3, 3);
我得到一个空列表作为结果。根据文档:https://docs.oracle.com/javase/7/docs/api/java/util/List.html#subList(int,%20int)。此方法针对非法端点索引值 (fromIndex size || fromIndex > toIndex) 引发 IndexOutOfBoundsException。这意味着如果 fromIndex == toIndex && toIndex == size,则不会抛出异常。
直观地说,这似乎不应该是这样,因为如果列表只有三个,您就无法访问列表的第四个元素。那么为什么会这样呢?它是为了满足某些用例还是意外的副作用?
【问题讨论】:
-
你用什么实现 List 测试?
-
我为 ArrayList 试过这个
-
但是您没有访问第四个元素,所以没有问题。您正在第三个元素之后创建空白空间的子列表。
subList(2, 2)将创建元素 2 和 3 之间空白空间的子列表。这一切都很好。现在subList(4, 4)会失败,因为当没有元素 4 时,你无法到达元素 4 之后的空白区域。 -
看看原始源代码永远不会有坏处。 Here's ArrayList。请注意,虽然
subList(3,3)可以工作,但subList(4, 4)应该会失败,因为toIndex > size。
标签: java