假设我创建了一个数组,并将值设置为以下内容:
double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0};
如何从数组中删除所有0.0
,只留下10.0
和3.0
,并将数组长度缩短为2?
这个网站上的其他问题涉及HashSets
或Collections
。是否有一种方法可以在不导入其他内容的情况下完成?
这里有一个使用流的一行代码可以完成此任务:
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 );
int[]
而不是 double[]
。 - Makotodouble[] 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);
}
System.arraycopy
,否则导入任何其他内容都会使这对您来说更加简单。 - Makoto