具有空值的排序数组

2022-09-02 12:27:58

我有一个程序,允许用户从数组中删除一个元素,我正试图使用compareTo()按字母顺序对它们进行排序;通过 for 循环。但是,空值给我带来了问题。例如,一个具有空值的数组:

String[] myArray = {"Apple", "Banana", null, "Durian", null, null, "Grapes"};

当Java比较它们并读取空值时,它会给我一个NullPointerException。

有没有办法用后面的空值对这个数组进行排序?例如:

{"Apple", "Banana", "Durian", "Grapes", null, null, null}

我知道使用Vectors可以解决这个问题,但我只是好奇是否有任何方法可以在不将我的数组更改为vector的情况下做到这一点。


答案 1

试试这个

    Arrays.sort(myArray, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            if (o1 == null && o2 == null) {
                return 0;
            }
            if (o1 == null) {
                return 1;
            }
            if (o2 == null) {
                return -1;
            }
            return o1.compareTo(o2);
        }});

它产生所需的订单


答案 2

编写你自己的接受空值,并将该比较器传递给 ) 方法ComparatorArrays.sort(