如何从java数组中删除和添加元素

时间:2017-08-01 09:58:01

标签: java arrays

我有一个java数组。我想从数组中删除第一个d项并将其存储到其他数组中。我能够存储但无法删除。我的代码

private static void itemRemove(int[] inputArr, int d) {
        int newArr [] = new int[d];
        for(int i=0;i<d;i++){
            newArr[i] = inputArr[i];
        }

        itemPrint(inputArr); 
        itemPrint(newArr);
    }

所以在示例中假设我有数组 inputArr[1,2,3,4,5]d2

我可以添加到newArray [1,2]但无法从inputArr中删除。

此外,一旦我从inputArr删除了大小为5的两个元素,那么我可以再添加两个元素。任何人都可以知道如何添加元素。

6 个答案:

答案 0 :(得分:1)

您需要创建一个大小为int[]的新inputArr.length - d数组并复制值:

private static int[] itemRemove(int[] inputArr, int d) {
    int[] newArrd = new int[d];
    int[] newArr = new int[inputArr.length-d];

    int newArrIdx = 0;
    for(int i=0;i<inputArr.length;i++){
        if(i<d){
           newArrd[i] = inputArr[i];
        }else{
           newArr[newArrIdx++] = inputArr[i];
        }
    }

    return newArr;
}

答案 1 :(得分:0)

你在这里没有做任何删除:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="go">
TRANSITION
</button>
<textarea></textarea>

您只需将输入数组中的值复制到新数组即可。输入数组没有改变。

Java中的数组具有固定大小,因此无法删除元素。您可以对此进行近似的典型方法是使用某个标记(或“哨兵”值)替换该元素。对于对象,可以是for(int i=0;i<d;i++){ newArr[i] = inputArr[i]; } 。对于原始值,例如整数,您可能只需要任意选择一个值:

null

这显然不是一个很好的解决方案。如果-999已经在数组中了怎么办?

处理此问题的正确方法是使用for(int i = 0; i < d; i++) { newArr[i] = inputArr[i]; inputArr[i] = -999; //marked for removal } List不是固定大小的,因此可以删除元素。您可以使用多种实现。 ArrayList最接近数组。

您的功能(更改为使用List)可能如下所示:

ArrayList

这里发生了一些不同的事情。最值得注意的是,我们有private static void itemRemove(List<Integer> inputArr, int d) { List<Integer> newArr = new ArrayList<>(); int removed = 0; while (removed < d) { newArr.add(inputArr.remove(0)); removed++; } itemPrint(inputArr); itemPrint(newArr); } ,现在我们有int[]。我们正在使用名为&#34; generics&#34;和generics don't work with primitive types,所以我们需要使用名为the "boxed type"的内容。

另一个明显的变化是循环不同。存在困难removing from collections while you are iterating over them并且我以不同方式构造循环以避免此问题。

答案 2 :(得分:0)

您可以这样做:

public class Test {

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};

        System.out.println("Original Array");
        itemPrint(array);

        itemRemove(array, 2);

        array = itemsLeft(array,2);
        System.out.println("Original Array After Removing Items");
        itemPrint(array); 
    }

    private static void itemRemove(int[] inputArr, int d) {
        int newArr [] = new int[d];
        for(int i=0;i<d;i++) newArr[i] = inputArr[i];
        System.out.println("New Array");
        itemPrint(newArr);
    }

    private static void itemPrint(int[] array) {
        for(Integer  i : array) System.out.println(i);
    }

    private static int[] itemsLeft(int[] inputArr, int d) {
        int [] itemsLeftArr =  new int[inputArr.length-d];
        for(int i=d, j=0; i<inputArr.length; i++, j++) {
            itemsLeftArr[j] = inputArr[i];
        }
        return itemsLeftArr;
    }

}

<强>输出:

Original Array
1
2
3
4
5
6
New Array
1
2
Original Array After Removing Items
3
4
5
6

答案 3 :(得分:0)

要从Array中删除元素,您还需要删除该元素的现有索引。

由于java中的数组是不可变的,因此您需要将数组值重新分配给新数组,就像使用newArr [index]

一样

只是为了删除数组元素而不改变索引,你可以像这样使用预定义的commons.apache.org库:

SUBSTRING

Apache Common

或者,您可以使用arraylist而不是this来动态调整数组大小。您可以像这样初始化输入数组:

SELECT SUBSTRING(@Attachment,
                 CHARINDEX('"', @Attachment)+1,
                 CHARINDEX('"', @Attachment,CHARINDEX('"', @Attachment)+1)-CHARINDEX('"', @Attachment)-1)

要从inputArr中删除带索引位置的元素,只需使用list的remove(int index)方法。

array = ArrayUtils.removeElement(array, element)

答案 4 :(得分:0)

您可以使用System.arrayCopy和Arrays.fill函数

来完成
    int[] inputArr = {1,2,3,4,5};
    int n = 3; //number of positions to move
    int[] newArray = new int[n];//creating new array of size n
    System.arraycopy(inputArr, 0, newArray, 0, n);//copying elements up to nth position to new array
    System.arraycopy(inputArr, n, inputArr, 0, inputArr.length-n);//copying remaining elements to start position
    Arrays.fill(inputArr, inputArr.length-n, inputArr.length, 0);//filling cells after the last element with default 0 value

    itemPrint(newArray);
    itemPrint(inputArr);

答案 5 :(得分:-1)

无法从数组中删除元素。你唯一能做的就是复制其他元素来覆盖它们。所以,如果您的数组看起来像这样:

1 2 3 4 5

你可以复制3,4和5来覆盖1和2,所以你将留下这个:

3 4 5 4 5

(注意4和5仍然存在)

然后你可以用你想要存储在数组中的新元素覆盖最后两个元素,这将留下你的信息:

3 4 5 6 7

要复制元素,您可以使用for循环手动执行此操作,也可以使用System.arrayCopy()