18

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

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

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

有什么方法可以让这个数组在后面用空值排序?例如:

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

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

4

2 回答 2

26

尝试这个

    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);
        }});

它产生所需的订单

于 2013-01-25T04:27:27.900 回答
7

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

于 2013-01-25T02:40:04.130 回答