从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