在java代码中使用ArrayUtills可以从java数组中删除元素。 下面是删除特定索引处元素的代码(代码中为'2',删除元素值等于'10'。
import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
public class RemoveObjectFromArray{
public static void main(String args[]) {
int[] test = new int[] { 10, 13, 10, 10, 105};
System.out.println("Original Array : size : " + test.length );
System.out.println("Contents : " + Arrays.toString(test));
//let's remove or delete an element from Array using Apache Commons ArrayUtils
test = ArrayUtils.remove(test, 2); //removing element at index 2
//Size of array must be 1 less than original array after deleting an element
System.out.println("Size of array after removing an element : " + test.length);
System.out.println("Content of Array after removing an object : "
+ Arrays.toString(test));
} }
它将输出显示为:
run:
Original Array : size : 5
Contents : [10, 13, 10, 10, 105]
Size of array after removing an element : 4
Content of Array after removing an object : [10, 13, 10, 105]
如何修改代码以获得以下输出:
run:
Original Array : size : 5
Contents : [10, 13, 10, 10, 105]
Size of array after removing an element : 2
Content of Array after removing an object : [ 13, 105]
答案 0 :(得分:3)
试试此代码
while (ArrayUtils.contains(test, 10)) {
//let's remove or delete an element from Array using Apache Commons ArrayUtils
test = ArrayUtils.removeElement(test, 10); //removing element with value 10
}
它应该可以解决你的问题。
答案 1 :(得分:2)
我会在你的情况下使用ArrayList,但如果你想坚持使用你的数组,你可以执行以下操作:
int count = 0;
for(int i = 0; i < test.length; i++){
if (test[i] == 10) {
count++;
}
}
int[] newTest = new int[count];
count = 0;
for( int = 0; i < test.length; i++){
if(test[i] != 10){
newTest[count++] = test[i];
}
}
我没有测试它
答案 2 :(得分:2)
虽然不是一种优雅的方式,但如果你只想使用数组,你可以使用以下内容:
public static void removeDupes(int[] array) {
int[] forbiddenNumbers = new int[array.length];
Arrays.sort(array);
for(int number : array) {
if(ArrayUtils.contains(forbiddenNumbers, number){
int index = Arrays.binarySearch(array, number);
while(index >= 0) {
ArrayUtils.remove(array, index);
index = Arrays.binarySearch(array, number);
}
ArrayUtils.remove(forbiddenNumbers, Arrays.binarySearch(forbiddenNumbers, number);
} else {
ArrayUtils.add(forbiddenNumbers, number);
}
}
}
这适用于阵列中存在的任何欺骗。
这样做基本上是通过数组,保存在另一个数组中的所有唯一数字,一旦在数组中遇到重复,它将删除原始数组中该数字的所有实例,之后它将从中移除数字唯一编号数组,因为它不再出现在原始数组中。
这是一个非常难以破解的解决方案,您应该认真考虑使用其他方法(例如使用集合),但如果您想在纯数组中执行此操作,那么这应该可行。
答案 3 :(得分:2)
这只能在一个循环中完成工作,而不会增加其他库或数据结构的开销,复杂性O(n)
int[] test = new int[] { 10, 13, 10, 10, 105};
int tobeDel = 10;
int[] tmp = new int[test.length];
int j=0;
for (int i=0;i<test.length;i++) {
if (test[i] == tobeDel) {
continue;
}
tmp[j] = test[i];
j++;
}
int[] result = new int[j];
System.arraycopy(tmp, 0, result, 0, j);
如果您编写自己的方法,请返回result
。
答案 4 :(得分:1)
解决方案1
我从来没有为您的要求找到任何单一功能,但这段代码可以。
while(ArrayUtils.removeElement(test,10).length!=test.length)
test=ArrayUtils.removeElement(test,10);
您可以使用removeElement删除元素并返回新数组。如果没有要删除的内容,则会返回相同的列表。
解决方案2
这也会做同样但没有任何迭代。如果这就是你要找的东西。
Arrays.sort(test);
int[] finalValue =ArrayUtils.subarray(test, 0, ArrayUtils.indexOf(test,10));
ArrayUtils.addAll(finalValue,ArrayUtils.subarray(test,ArrayUtils.lastIndexOf(test,10), test.length));
这将对数组进行排序,并将数组从开始到第一次出现,然后从最后一次出现到数组末尾。!!