如何将元素插入到订单数组中

时间:2012-07-11 21:56:34

标签: java arrays insertion sorted

假设我有一个按升序排序的整数数组,我想插入一个新数字,我知道插入它的位置。我怎么能使用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;

2 个答案:

答案 0 :(得分:0)

你的第一条路可行。

如果您不自信,请参阅arraycopy arraycopy上的文档。如果源和目标是相同的,它将被视为复制到临时数组,然后将其复制回原始数组,因此您可以确信它将起作用!

答案 1 :(得分:0)

一些想法/观察

  • 为什么要问你能轻易测试什么?
  • 第一种方式可能抛出IndexOutOfBounds(然后不会工作)
    • 因为在原始数组中没有其他项目的地方
    • 因为复制段的长度最多只能是items.length - i -1(在插入点和之后会有长度-i,必须删除最后一个或者有其他例外)。
  • 第二种方式也会失败。看起来你错误地认为最后一个位置的长度。