JAVA 去除数组 null 值

在JAVA编程中,我们经常会遇到处理数组的情况。有时候,我们需要从数组中去除掉所有的null值,以便于后续的操作。本文将介绍几种方法来实现这一功能,并提供相应的代码示例。

方法一:使用循环遍历

最简单的方法就是使用循环遍历数组,然后判断每个元素是否为null。如果是null,则将其移除。

下面是一个示例代码:

public class ArrayUtils {
    public static String[] removeNullValues(String[] array) {
        int nullCount = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] == null) {
                nullCount++;
            }
        }
        
        String[] newArray = new String[array.length - nullCount];
        int j = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] != null) {
                newArray[j] = array[i];
                j++;
            }
        }
        
        return newArray;
    }
}

上述代码中,removeNullValues方法接受一个字符串数组作为参数,并返回一个去除了null值的新数组。该方法首先计算出数组中null值的个数,然后创建一个新数组,长度为原数组长度减去null值的个数。接下来,利用两个指针,一个用于遍历原数组,另一个用于指向新数组的插入位置。如果原数组的元素不为null,则将其插入到新数组中。

这种方法相对简单,但是需要遍历两次数组,时间复杂度为O(n)。

方法二:使用流进行过滤

JAVA 8及以上版本引入了流的概念,可以方便地对数组进行各种操作,包括过滤。

下面是使用流进行过滤的示例代码:

import java.util.Arrays;
import java.util.stream.Collectors;

public class ArrayUtils {
    public static String[] removeNullValues(String[] array) {
        return Arrays.stream(array)
                .filter(e -> e != null)
                .toArray(String[]::new);
    }
}

上述代码中,我们使用Arrays.stream方法将数组转化为流,然后使用filter方法过滤掉所有为null的元素,最后使用toArray方法将流转化为数组。

这种方法相比于循环遍历的方法,代码更加简洁,且只需要遍历一次数组,时间复杂度为O(n)。

方法三:使用Apache Commons ArrayUtils库

Apache Commons是一个非常流行的JAVA工具库,提供了很多实用的工具类和方法。其中,ArrayUtils是其数组操作的一个常用类,提供了各种对数组进行操作的方法,包括去除null值。

下面是使用Apache Commons ArrayUtils库进行去除null值的示例代码:

import org.apache.commons.lang3.ArrayUtils;

public class ArrayUtilsExample {
    public static String[] removeNullValues(String[] array) {
        return ArrayUtils.removeElement(array, null);
    }
}

上述代码中,我们使用ArrayUtils.removeElement方法去除数组中的null值。该方法接受两个参数,第一个参数为原数组,第二个参数为需要去除的值。这里我们将null作为第二个参数传入,即可去除所有的null值。

使用Apache Commons ArrayUtils库可以更加方便地进行数组操作,不需要编写重复的代码,提高了代码的复用性。

总结

本文介绍了三种去除数组中null值的方法,包括使用循环遍历、使用流进行过滤和使用Apache Commons ArrayUtils库。这些方法各有优劣,可以根据具体的情况选择合适的方法。如果在项目中使用到频繁的数组操作,推荐使用Apache Commons ArrayUtils库,可以提高开发效率,减少代码量。

希望本文对您有所帮助,谢谢阅读!

类图

classDiagram
    ArrayUtilsExample --|> ArrayUtils
    ArrayUtils --|> org.apache.commons.lang3.ArrayUtils

上述类图展示了本文中提到的ArrayUtilsExample类和ArrayUtils类之间的关系