Java:删除数组中某个项的所有实例

Java:删除数组中某个项的所有实例,java,arrays,Java,Arrays,假设我创建一个数组,设置值如下: double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0}; 如何从阵列中删除所有0.0,只留下10.0和3.0,并将阵列长度缩短为2 本网站上的其他问题涉及哈希集或集合。有没有不导入其他内容的方法?这里有一个使用流的单行程序,可以完成任务: exampleArray = Arrays.stream(exampleArray).filter(d -> d != 0.0).toArray(); 这只是一个使用in

假设我创建一个数组,设置值如下:

double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0};
如何从阵列中删除所有
0.0
,只留下10.0和3.0,并将阵列长度缩短为2


本网站上的其他问题涉及
哈希集
集合
。有没有不导入其他内容的方法?

这里有一个使用流的单行程序,可以完成任务:

exampleArray = Arrays.stream(exampleArray).filter(d -> d != 0.0).toArray();

这只是一个使用int数据类型的示例。它可以根据您的需要进行更改

说明: j是一个计数器变量,用于通过在创建新数组时排除非零索引并将所有非零索引复制到新数组来调整
newArray
的大小。我们这样做是因为数组长度在java中是不可变的。因此,在尝试调整数组大小时,必须创建一个新数组并进行复制。这是在需要大小可变时使用其他数据结构的好处

int j = 0;
for( int i=0; i<array.length; i++ ){
    if (array[i] != 0)
        array[j++] = array[i];
}
int [] newArray = new int[j];
System.arraycopy( array, 0, newArray, 0, j );
intj=0;

对于(int i=0;i希望此代码可以帮助您。这是最基本(不是最好)的方法:

double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0}; 
double numberToErase = 0.0; //This could be a parameter
int newArraySize = 0;

//Get the fixed size of the new Array
for (double n : exampleArray) {
    if (n != numberToErase) {
        newArraySize++;
    }
}

//Create the new array 
double[] newArray = new double[newArraySize];
int newArrayCurrentIndex = 0;
for (double n : exampleArray) {
    if (n != numberToErase) {
        newArray[newArrayCurrentIndex++] = n;
    }
}

//Check the result
for (double n : newArray) {
    System.out.println("Number: " + n);
}

只需创建一个新数组,迭代旧数组并将所需项目推送到新数组中。如果您不想广泛使用
系统。arraycopy
,导入任何其他内容都会使您的操作简单得多。@Makoto是的,但我相信用户Yelliver的方法似乎是可行的…考虑到您不能只将元素推送到arr中可以,但没有预定义的大小…不,这是不可行的。@Makoto数组是不可变的吗?您应该解释这段代码在做什么。另外,解释为什么使用
int[]
而不是
double[]