从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]