【问题标题】:Basic array initialization and sorting question基本数组初始化和排序问题
【发布时间】:2009-02-02 04:25:53
【问题描述】:

这是一个相当基本的java问题

我有一个包含字符串的数组,我想使用 java.util.Arrays.sort 对其进行排序

当我写作时

String[] myArray = {"A","B","C"};
java.util.Arrays.sort(myArray);

排序正确

但是当我有

String[] myArray = new String[10];
myArray[0] = "A";
myArray[1] = "B";
myArray[2] = "C";

java.util.Arrays.sort(myArray);

排序抛出空引用异常

我很确定它确实很愚蠢,我现在只是不明白。我必须新建字符串,因为硬编码默认值不会在任何地方得到任何人。

【问题讨论】:

    标签: java arrays new-operator


    【解决方案1】:

    初始化第二个数组时,只初始化前三个元素。其他元素初始化为null,因此无法排序。

    【讨论】:

      【解决方案2】:

      在源码中,该方法使用 compareTo() 作为排序条件。显然,在 null 上调用 compareTo() 将引发 NullPointerException。正如它在 Java Docs 中提到的那样,

      数组中的所有元素必须是 相互比较(即, e1.compareTo(e2) 不能抛出 任何元素的 ClassCastException 数组中的e1和e2)

      当然这里不是关于ClassCastException,但是comapreTo() 的调用是显而易见的。

      [已编辑]

      附:从异常堆栈跟踪中找出这一点是您最好的选择。

      【讨论】:

        【解决方案3】:

        尝试以下方法仅对前三个元素进行排序。

        Arrays.sort(myArray, 0, 3);
        

        【讨论】:

          【解决方案4】:

          发生的情况是,当您拥有包含十个项目的数组时,其他项目未初始化。因此,当排序算法工作时,它会尝试获取字符串的值,但却什么也没得到,并抛出异常。

          您需要确保不要尝试对空间大于您放入其中的内容的数组进行排序。

          【讨论】:

            【解决方案5】:

            我认为,既然你让 myArray 存储 10 个元素,它(有效地)在末尾添加 7 个空值,然后 Arrays.sort() 无法根据字符串对空元素进行排序。

            【讨论】:

              【解决方案6】:

              它不能处理最初创建数组时存在的空字符串。 避免显式将 all 设为 "" 或根据需要分配。

              虽然不知道这是否是 API 级别的失误,因为他们可以满足空对象(我们在 SQL orderby 中获取的方式)或者还有更多的东西。

              【讨论】:

                【解决方案7】:

                您将数组大小定义为 10,但仅初始化 3 个索引。将数组大小更改为 3 或初始化所有 10 个。

                【讨论】:

                  【解决方案8】:

                  数组有 10 个项目,但你只在里面放了 3 个。因此,其他 7 个为 NULL。考虑改用 ArrayList。

                  【讨论】:

                  • 即使在 ArrayList 中它也会给你一个 NullPointer,以防你在那里有一个空对象。因为它在某个地方使用了 Arrays.sort() 。如果你的意思是别的,那很好。没有 -ve 因为我不确定你的意思。
                  【解决方案9】:

                  应该使用数组列表,因为有 3 个元素而不是 10 个。

                  数组的其他 7 个元素将具有空值。

                  正是这些空值导致排序时出现空指针问题。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2022-06-10
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-11-22
                    • 2021-10-20
                    • 1970-01-01
                    相关资源
                    最近更新 更多