从java中的数组中删除特定索引

我可以通过提及索引值从数组中删除特定元素吗? 例如,我可以通过给出index值1来删除字符d吗?

 char[] words = { 'c', 'd', 'f', 'h', 'j' }; 

如果您不想使用ArrayList,则arraycopy是另一种选择:

  System.arraycopy(words, 0, result, 0, i); System.arraycopy(words, i+1, result, i, result.length-i); 

其中i是您要删除的索引。

希望我能帮忙。

编辑 :当然,您应该首先定义正确的数组长度:

 char[] result = new char[words.length-1]; 

您无法从数组中删除元素并“减少”数组大小。 一旦你创建了一个数组,它的长度是固定的。

您可以将值更改为无意义或被视为“空”的值,但您无法将其删除。
另一种选择是使用列表,例如ArrayList。 它有一个“删除”方法,允许您实际从中删除元素。

假设您不希望您的数组包含空值,那么您必须创建一个执行此操作的方法。 这样的东西应该足够了:

 public char[] remove(int index, char[] arr) { char[] newArr = new char[arr.length - 1]; if(index < 0 || index > arr.length) { return arr; } int j = 0; for(int i = 0; i < arr.length; i++) { if(i == index) { i++; } newArr[j++] = arr[i]; } return newArr; } 

然后用remove()的结果替换旧数组。

如果您需要从数组中删除一个或多个元素而不将其转换为List也不需要创建其他数组,则可以在O(n)中执行此操作,而不依赖于要删除的项目数。

这里, a是初始数组, int... r是要删除的元素的不同有序索引(位置):

 public int removeItems(Object[] a, int... r) { int shift = 0; for (int i = 0; i < a.length; i++) { if (shift < r.length && i == r[shift]) // i-th item needs to be removed shift++; // increment `shift` else a[i - shift] = a[i]; // move i-th item `shift` positions left } for (int i = a.length - shift; i < a.length; i++) a[i] = null; // replace remaining items by nulls return a.length - shift; // return new "length" } 

小测试:

 Character[] words = {'c','d','f','h','j'}; removeItems(words, 1); System.out.println(Arrays.asList(words)); // [c, f, h, j, null]