从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

