1

假设我有一个按升序排序的整数数组,我想插入一个新数字并且我知道在什么位置插入它。我怎么能使用 System.arraycopy。

System.arraycopy(items, i, items, i + 1, items.length+1);
items[i] = n;

或者我是否必须从插入的位置(将位置移动一个元素)创建一个临时数组副本到临时数组,然后复制回原始数组

int[] newItems = new int[size + 1];
System.arraycopy(items, i, newItems, i + 1, items.length+1);
items[i] = s;
size++;
System.arraycopy(items, 0, newItems, i, i);
items = newItems;
4

2 回答 2

0

你的第一种方法会奏效。

如果您不确定,请参阅有关 arraycopy arraycopy的文档。如果源和目标相同,它会像复制到临时数组一样,然后再复制回原始数组,因此您可以确信它会起作用!

于 2012-07-11T22:00:39.383 回答
0

一些想法/观察

  • 为什么要问你可以轻松测试什么?
  • 第一种方法可能会抛出 IndexOutOfBounds (然后不起作用)
    • 因为在原始数组中没有其他项目的位置
    • 因为复制段的长度最多可以是 items.length - i -1(在插入点和之后会有 length-i,必须删除最后一个,否则会有例外)。
  • 第二种方式也会失败。看起来您将长度误认为是最后一个位置。
于 2012-07-11T22:31:46.290 回答