我不确定我是否理解错误,对于util Arrays.copyOfRange(array,from,to)
,假设我们想要从第3个元素切换到最后一个元素,我必须这样做:
a = {3, 4, 5, 6, 9, 10};
b = Arrays.copyOfRange(a,3,6);
哪个产生{6,9,10}
。在我看来,这没有意义。
我认为如果我们谈论索引,最后一个元素的索引应为5,即Arrays.copyOfRange(a,3,5).
如果我们正在谈论这个职位,那应该是Arrays.copyOfRange(a,2,5).
否则它应抛出ArrayOutOfBoundException.
所以这里的问题是写的功能不好吗? ,或者我理解错了什么?
答案 0 :(得分:3)
最后一个参数可以在边界之外,例如大于docs状态的数组大小:
to - 要复制的范围的最终索引,不包括。 (该索引可能位于数组之外。)
且to
是排他性的,意味着Arrays.copyOfRange(a,3,6)
将返回位置3,4和5处的元素 - 6处的元素将不存在。
另外
抛出: ArrayIndexOutOfBoundsException - 如果来自< 0或来自> original.length
你的假设"否则它应该抛出ArrayOutOfBoundException" 是错误的。
答案 1 :(得分:1)
将这些索引视为偏移量。 [ 2, 6, 1, 3 ]
和其他许多人也是如此。
考虑到偏移量,想象它就像元素之间的指针。例如:
[ 2, 6, 1, 3 ]
^
偏移0将是
[6, 1]
现在,如果你想要元素[ 2, 6, 1, 3 ]
^ ^
,那么偏移就是
Match()
是索引1-3。