从Java中的数组中删除元素

时间:2020-01-09 10:35:36  来源:igfitidea点击:

在本文中,我们将介绍如何在Java中从数组中删除或者删除元素。我们有几个选项可以完成从数组中删除元素的任务。

  • 编写自己的逻辑。参见示例。
  • 使用System.arraycopy()方法从数组中删除元素。参见示例。
  • 使用Apache Commons库。在该库中,有一个ArrayUtils类具有用于该目的的remove方法。参见示例。
  • 使用ArrayList删除元素。我们将需要将数组转换为ArrayList,然后再返回到array。参见示例。

编写自己的逻辑

如果必须编写自己的Java程序以从数组中删除元素,则必须将所有要删除的元素之后的所有元素向左移动。我们将要考虑的另一件事是:一旦创建的数组具有固定的长度,那么在移动所有元素之后,数组中仍将剩下一个空间,并且该空间将通过重复最后一个元素来填充。让我们看一个例子。

Java程序从数组中删除元素

import java.util.Scanner;

public class RemoveArrayElement {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] numArray = {6, 8, 10, 34, 12, 2};

    System.out.print("Enter Element to be deleted: ");
    int element = in.nextInt();
    
    for(int i = 0; i < numArray.length; i++){
      if(numArray[i] == element){
        // shift elements to the left
        for(int j = i; j < numArray.length - 1; j++){
          numArray[j] = numArray[j+1];
        }
        break;
      }
    }
    
    System.out.println("Array elements after deletion-- " );
    for(int i = 0; i < numArray.length; i++){
      System.out.print(" " + numArray[i]);
    }  
  }
}

输出:

Enter Element to be deleted: 10
Array elements after deletion-- 
 6 8 34 12 2 2

通过重复最后一个元素,可以在元素移位后看到空白区域。

我们可以做的是创建另一个大小比原始数组小的数组。转移元素后,我们可以将元素从原始数组复制到新数组,剩下最后一个元素。要复制数组,可以使用System.arraycopy()方法。

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)–从指定的源数组复制数组,从指定位置开始复制到目标数组的指定位置。复制的组件数等于length参数。

import java.util.Scanner;

public class RemoveArrayElement {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] numArray = {6, 8, 10, 34, 12, 2};
    
    System.out.print("Enter Element to be deleted: ");
    int element = in.nextInt();
    int[] newArray = new int[numArray.length - 1];
    
    for(int i = 0; i < numArray.length; i++){
      if(numArray[i] == element){
        // shift elements to the left
        for(int j = i; j < numArray.length - 1; j++){
          numArray[j] = numArray[j+1];
        } 
        // Copy array
        System.arraycopy(numArray, 0, newArray, 0, numArray.length - 1);
        break;
      }
    }
    
    System.out.println("Array elements after deletion-- " );
    for(int i = 0; i < newArray.length; i++){
      System.out.print(" " + newArray[i]);
    }  
  }
}

输出:

Enter Element to be deleted: 10
Array elements after deletion-- 
 6 8 34 12 2

如我们所见,额外元素的问题已解决。

使用System.arraycopy()方法删除数组元素

我们可以使用System.arraycopy()方法从Java中的数组中删除元素。一旦知道了必须删除的元素的索引,就可以调用System.arraycopy()方法两次,一次是将元素从0复制到索引,然后从index + 1复制到数组的末尾。

import java.util.Scanner;

public class RemoveArrayElement {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] numArray = {6, 8, 10, 34, 12, 2};

    System.out.print("Enter Element to be deleted: ");
    int element = in.nextInt();
    int[] newArray = new int[numArray.length - 1];
    
    for(int i = 0; i < numArray.length; i++){
      if(numArray[i] == element){
        // Copy array
        System.arraycopy(numArray, 0, newArray, 0, i);
        System.arraycopy(numArray, i + 1, newArray, i, (numArray.length - (i+1)));
        break;
      }
    }
    
    System.out.println("Array elements after deletion-- " );
    for(int i = 0; i < newArray.length; i++){
      System.out.print(" " + newArray[i]);
    }  
  }
}

输出:

Enter Element to be deleted: 34
Array elements after deletion-- 
 6 8 10 12 2

Enter Element to be deleted: 6
Array elements after deletion-- 
 8 10 34 12 2

在Apache Commons中使用ArrayUtils类

我们还可以使用ArrayUtils类中的ArrayUtils.remove()方法从Java中的数组中删除元素。为此,我们必须在类路径中有Apache commons jar。

import java.util.Scanner;

import org.apache.commons.lang3.ArrayUtils;

public class RemoveArrayElement {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int[] numArray = {6, 8, 10, 34, 12, 2};

    System.out.print("Enter Element to be deleted: ");
    int element = in.nextInt();
    
    for(int i = 0; i < numArray.length; i++){
      if(numArray[i] == element){
        // Using ArrayUtils class
        numArray = ArrayUtils.remove(numArray, i);
        break;
      }
    }
    
    System.out.println("Array elements after deletion-- " );
    for(int i = 0; i < numArray.length; i++){
      System.out.print(" " + numArray[i]);
    }  
  }
}

输出:

Enter Element to be deleted: 12
Array elements after deletion-- 
 6 8 10 34 2

将数组转换为ArrayList以从数组中删除元素

我们可以将数组转换为ArrayList,然后从该ArrayList中删除该元素。删除元素后,我们可以将ArrayList转换回数组。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class RemoveArrayElement {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    Integer[] numArray = {6, 8, 10, 34, 12, 2};
    System.out.print("Enter Element to be deleted: ");
    int element = in.nextInt();
    
    for(int i = 0; i < numArray.length; i++){
      if(numArray[i] == element){
        numArray = removeElement(numArray, i);
        break;
      }
    }
    
    System.out.println("Array elements after deletion-- " );
    for(int i = 0; i < numArray.length; i++){
      System.out.print(" " + numArray[i]);
    }  
  }

  public static Integer[] removeElement( Integer[] numArray, int index ){
    // Converting to list
    List tempList = new ArrayList(Arrays.asList(numArray));
    tempList.remove(index);
    // converting back to array
    return tempList.toArray(new Integer[0]);
  }
}

输出:

Enter Element to be deleted: 8
Array elements after deletion-- 
 6 10 34 12 2