Arrays.copyOfRange中的索引是否正确?

时间:2017-01-13 15:27:03

标签: java arrays

我不确定我是否理解错误,对于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.

所以这里的问题是写的功能不好吗? ,或者我理解错了什么?

2 个答案:

答案 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。