java - 删除数组中空值的最有效方法是什么。

标签 java arrays performance

我很好奇删除数组中空值的最有效方法是什么。这是我当前的 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/

相关文章:

java - 抑制 Eclipse 中缺少 @Override 注释的警告

java - Arrays 类型中的方法 asList(T[]) 不适用于参数 (int, int)

linux - 使用多选项解释 rsa 的 openssl 速度输出

python - 如何重新搜索或重新匹配整个文件而不将其全部读入内存?

javascript - 从多个数组构建自定义 JSON 数组

c# - 检查类型最快的方法是什么?

java - 在 Apache Camel 中配置线程名称

java - onActivityResult() 不是从 Activity 调用

java - Android:实现 ViewHolder

sql - 需要从 postgresql 表中动态选择一个 JSON 数组元素