排序包含null元素的数组

时间:2016-01-21 09:07:41

标签: java arrays sorting nullpointerexception

我有一个大小为1000的String数组:

String[] subStrStore = new String[1000];

我在数组中只有6个元素。如果我使用以下方式对其进行排序:

Arrays.sort(subStrStore);

我得到一个空指针异常,因为它试图比较null元素。怎么能解决这个问题呢?

5 个答案:

答案 0 :(得分:2)

如果字符串是您可以使用的前6个元素

Arrays.sort(subStrStore, 0, 6);

答案 1 :(得分:2)

使用自定义比较器,

Arrays.sort(subStrStore, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                if (o1 == o2)
                    return 0;

                if (o1 == null) {
                    return -1;
                }
                if (o2 == null) {
                    return 1;
                }

                return o1.compareTo(o2);

            }
        });

这应该在数组末尾推送所有空值

答案 2 :(得分:1)

删除null元素并排序。

    String[] subStrStore = new String[1000];
    subStrStore[10] = "f";
    subStrStore[200] = "e";
    subStrStore[300] = "d";
    subStrStore[500] = "c";
    subStrStore[750] = "b";
    subStrStore[900] = "a";
    String[] sorted = Stream.of(subStrStore)
        .filter(s -> s != null)
        .sorted()
        .toArray(String[]::new);
    System.out.println(Arrays.toString(sorted));
    // -> [a, b, c, d, e, f]

答案 3 :(得分:0)

查看java.util.Arrays中的Arrays.copyOf()。它会完成我相信的工作。

答案 4 :(得分:-2)

我认为最好的方法是在比较之前检查元素。类似的东西:

if(object == null){break;}

如果您使用阵列的第一个元素,这将起作用。 1,2,3,4 NULL,NULL ... x1000。 NOT 1,2,NULL,NULL,3,4,5。&lt; - 如果你必须使用例外:) 你不想在第一个null之后检查其他元素,或者你可以只使用try catch并处理异常。