如何向数组中添加元素并移动索引?

19

我需要在数组中指定位置和值添加一个元素。 举个例子,我有一个数组:

int []a = {1, 2, 3, 4, 5, 6};

应用addPos(int 4, int 87)后,它应该是

int []a = {1, 2, 3, 4, 87, 5};

我知道这里应该对数组的索引进行移位,但不知道如何在代码中实现它。


1
在Java中,您无法移动数组的索引。数组是固定大小的。创建一个具有所需值的新数组,并将引用“a”分配给新数组。 - kosa
作业?如果是,请标记为作业。 - user166390
现在为时已晚,因为已经有完整的代码答案了。 - Marko Topolnik
3
使用ArrayUtils.add(T[] array, int index,T element)方法可以在Java中向数组中添加元素。该方法将一个指定的元素插入到指定索引处,并将原数组中的所有元素向右移动,以给新元素留出空间。最后,该方法返回一个包含新元素的新数组。要使用该方法,您需要导入Apache Commons Lang库。 - Tadeu Jr.
15个回答

1
int[] b = new int[a.length +1];
System.arraycopy(a,0,b,0,4); 
//System.arraycopy(srcArray, srcPosition, destnArray, destnPosition, length)
b[4]=87;
System.arraycopy(a,4,b,5,2);

数组 b 将被创建为 {1, 2, 3, 4, 87, 5, 6};


0

试试这个

public static int [] insertArry (int inputArray[], int index, int value){
    for(int i=0; i< inputArray.length-1; i++) {

        if (i == index){

            for (int j = inputArray.length-1; j >= index; j-- ){
                inputArray[j]= inputArray[j-1];
            }

            inputArray[index]=value;
        }

    }
    return inputArray;
}

0

System.arraycopy 更高效,但由于索引计算而难以正确使用。如果没有性能要求,最好使用 jrad 的答案或 ArrayList

public static int[] insert(
    int[] array, int elementToInsert, int index) {
  int[] result = new int[array.length + 1];
  // copies first part of the array from the start up until the index
  System.arraycopy(
      array /* src */,
      0 /* srcPos */,
      result /* dest */,
      0 /* destPos */,
      index /* length */);
  // copies second part from the index up until the end shifting by 1 to the right
  System.arraycopy(
      array /* src */,
      index /* srcPos */,
      result /* dest */,
      index + 1 /* destPos */,
      array.length - index /* length */);
  result[index] = elementToInsert;
  return result;
}

并编写JUnit4测试以检查其是否按预期工作。

@Test
public void shouldInsertCorrectly() {
  Assert.assertArrayEquals(
      new int[]{1, 2, 3}, insert(new int[]{1, 3}, 2, 1));
  Assert.assertArrayEquals(
      new int[]{1}, insert(new int[]{}, 1, 0));
  Assert.assertArrayEquals(
      new int[]{1, 2, 3}, insert(new int[]{2, 3}, 1, 0));
  Assert.assertArrayEquals(
      new int[]{1, 2, 3}, insert(new int[]{1, 2}, 3, 2));
}

0
public class HelloWorld{

     public static void main(String[] args){
        int[] LA = {1,2,4,5};
        int k = 2;
        int item = 3;
        int j = LA.length;
        int[] LA_NEW = new int[LA.length+1];


       while(j >k){
            LA_NEW[j] = LA[j-1];
            j = j-1;
        }
        LA_NEW[k] = item;
        for(int i = 0;i<k;i++){
            LA_NEW[i] = LA[i];
        }
        for(int i : LA_NEW){
            System.out.println(i);
        }
     }
}

0
以下代码将在指定位置插入元素,并移动现有元素以移动到新元素旁边。
public class InsertNumInArray {

public static void main(String[] args) {
    int[] inputArray = new int[] { 10, 20, 30, 40 };
    int inputArraylength = inputArray.length;
    int tempArrayLength = inputArraylength + 1;
    int num = 50, position = 2;
    int[] tempArray = new int[tempArrayLength];

    for (int i = 0; i < tempArrayLength; i++) {
        if (i != position && i < position)
            tempArray[i] = inputArray[i];
        else if (i == position)
            tempArray[i] = num;
        else
            tempArray[i] = inputArray[i-1];
    }

      inputArray = tempArray;

    for (int number : inputArray) {
        System.out.println("Number is: " + number);
    }
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接