如何在Java中删除数组元素

在Java中创建数组时,我们要指定其数据类型和大小。这由JVM用于为数组元素分配必要的内存。数组中没有特定的方法用于移除元素。

使用for循环从数组中删除一个元素。

这个方法需要创建一个新的数组。我们可以使用for循环将新数组填充,但不包括我们想要移除的元素。

package com.journaldev.java;

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        int[] arr_new = new int[arr.length-1];
        int j=3;
        for(int i=0, k=0;i<arr.length;i++){
            if(i!=j){
                arr_new[k]=arr[i];
                k++;
            }
        }
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After deletion :" + Arrays.toString(arr_new));

    }
}
Arr Delete

该代码删除索引为3的元素。该方法仅将除索引为3的元素外的所有元素复制到一个新数组中。

通过值删除数组元素。

不同于前一个情况,这段代码将根据元素的值来删除该元素。由于删除后数组的大小必须是已知的,所以无法处理重复元素。

package com.journaldev.java;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        int[] arr_new = new int[arr.length-1];
        int j=3;
        for(int i=0, k=0;i<arr.length;i++){
            if(arr[i]!=j){
                arr_new[k]=arr[i];
                k++;
            }
        }
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After deletion :" + Arrays.toString(arr_new));

    }
}
Arr Delete based on value

这与之前的情况唯一的区别是,if条件中的i!=j被替换为arr[i]!=j。

3. 当数组包含重复元素时,通过其值删除元素。

在重复情况下,根据值执行删除需要使用ArrayList。由于ArrayList不需要提前确定大小,它允许我们动态扩展。

package com.journaldev.java;

import java.util.ArrayList;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,3,3,4,5};
        ArrayList<Integer> arr_new = new ArrayList<>();
        int j=3;
        for(int i=0;i<arr.length;i++){
            if(arr[i]!=j){
                arr_new.add(arr[i]);

            }
        }
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After deletion :" +arr_new);

    }
}
array-deletion-duplicates

4. 同一个数组中的元素转移位置

这种方法涉及将数组中的元素进行移动。元素的移动是通过将要删除的元素替换为下一索引位置的元素来实现的。

package com.journaldev.java;
import java.util.Arrays;
public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,3,3,4,5};
        int j=3;
        System.out.println("Before deletion :" + Arrays.toString(arr));
        int count =0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == j){
                count++;

                // shifting elements
                for(int k = i; k < arr.length - 1; k++){
                    arr[k] = arr[k+1];
                }
                i--;
               // break;
            }
        }

        System.out.print("After Deletion :" );
        for(int i = 0; i < arr.length-count; i++){
            System.out.print(" " + arr[i]);
        }
        System.out.println();
        System.out.println("Whole array :" + Arrays.toString(arr));

    }
}

计数变量表示已删除的元素数量。这个变量对于跟踪数组应该打印到哪个索引位置是至关重要的。这种方法也会处理重复元素。

Shifting Elements In Array

从ArrayList中删除元素

ArrayList是由数组支持的。在ArrayList中删除一个元素非常直接。它只需要调用一个内置函数即可。

package com.journaldev.java;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,3,3,4,5};
        ArrayList<Integer> arr_new = new ArrayList<Integer>();
        for (int i : arr)
        {
            arr_new.add(i);
        }
        arr_new.remove(3);
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After Deletion:" + arr_new);
    }
}

调用remove(i)函数将从索引i处删除元素。与数组相比,ArrayList中的删除操作相对较容易。

ArrayList Deletion

结论

我们看到了使用不同方法删除数组元素的一些例子。数组和数组列表中元素删除的区别显而易见。如果需要反复进行删除操作,那么应该使用数组列表以便从其内置函数中获益。对于元素的添加也是如此。由于其动态性,数组列表提供了更简单和不那么繁琐的方式来修改数组。

bannerAds