如何在Java中删除数组元素

时间:2020-02-23 14:34:30  来源:igfitidea点击:

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

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

此方法需要创建一个新的数组。
我们可以使用for循环来填充新数组,而无需删除想要删除的元素。

package com.theitroad.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));

  }
}

代码将删除索引3处的元素。
此方法将索引3处的元素以外的所有元素简单地复制到新数组中。

2.按其值删除数组元素

与前一种情况不同,此代码将根据其值删除该元素。
这不适用于重复项,因为必须知道删除后阵列的大小。

package com.theitroad.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));

  }
}

这种情况与前一种情况之间的唯一区别是在if条件中代替了i!= j的情况是arr [i]!= j。

3.当数组包含重复项时,按其值删除元素

在重复的情况下,根据值执行删除操作需要使用ArrayList。
由于ArrayList不需要现在预先设置大小,因此它允许我们动态扩展。

package com.theitroad.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);

  }
}

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

此方法涉及移动同一阵列中的元素。
元素的移动将替换下一个索引处要删除的元素。

package com.theitroad.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));

  }
}

Count变量指示删除的元素数。
该变量对于跟踪要打印数组的索引至关重要。
此方法也可以处理重复项。

5.从ArrayList中删除元素

ArrayList由数组支持。
直接删除ArrayList中的元素。
它需要对内置函数的一个简单调用。

package com.theitroad.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处的元素。
与Arrays相比,ArrayLists中的删除相对容易一些。