【问题标题】:Sort array containing null elements [duplicate]对包含空元素的数组进行排序[重复]
【发布时间】:2016-04-27 10:35:02
【问题描述】:

我有一个大小为 1000 的字符串数组:

String[] subStrStore = new String[1000];

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

Arrays.sort(subStrStore);

我得到一个空指针异常,因为它试图比较空元素。如何解决这个问题?

【问题讨论】:

标签: java arrays sorting nullpointerexception


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    删除空元素并排序。

        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】:

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

      Arrays.sort(subStrStore, 0, 6);
      

      【讨论】:

        【解决方案4】:

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

        if(object == null){break;}
        

        这只有在你使用数组的第一个元素时才有效。 1、2、3、4 NULL,NULL ... x1000。 NOT 1,2, NULL, NULL, 3, 4, 5.

        【讨论】:

        【解决方案5】:

        使用自定义比较器,

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

        这应该将所有空值推到数组的末尾

        【讨论】:

          猜你喜欢
          • 2015-02-17
          • 2011-03-27
          • 2019-05-30
          • 1970-01-01
          • 1970-01-01
          • 2010-09-18
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          相关资源
          最近更新 更多