我很好奇删除数组中空值的最有效方法是什么。这是我当前的 null(0) 删除方法。
public static int[] removeNull(int[] array){
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 );
return newArray;
}
这个方法的性能如何?我原以为它是 n。
最佳答案
是的,您的方法的时间复杂度是 O(n)
- 您的循环有 n
(数组的长度)次迭代,并且复制数组需要的时间与复制数组的大小,在本例中最坏情况下为 O(n)
。
没有比这更好的了(就时间复杂度而言),因为您必须遍历整个数组才能找到应该删除的元素。
如果您的目标是降低代码复杂性(即编写最短的代码),您可以使用 IntStream
(需要 Java 8 或更高版本):
public static int[] removeNull(int[] array) {
return Arrays.stream(array).filter(i -> i != 0).toArray();
}
正如 Andreas 评论的那样,此解决方案的优点是保持原始数组不变。
关于java - 删除数组中空值的最有效方法是什么。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47919122/