基本数组初始化和排序问题

时间:2009-02-02 04:25:53

标签: java arrays new-operator

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

我有一个包含String的数组,我希望使用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);

sort抛出一个nullreferenceexception

我很确定它的东西真的很愚蠢,我现在不知道。我必须新建String,因为硬编码默认值在任何地方都不会得到任何人。

9 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

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

  

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

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

<强> [编辑]

P.S。从异常堆栈跟踪中找出这个是最好的选择。

答案 2 :(得分:3)

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

Arrays.sort(myArray, 0, 3);

答案 3 :(得分:1)

当您拥有包含10个项目的数组时,其他项目未初始化。因此,当排序算法工作时,它会尝试获取字符串的值,但不会获取任何内容,并抛出异常。

您需要确保不要尝试对数组进行排序,这些数组的空间大于放入的数组。

答案 4 :(得分:1)

我认为既然你让myArray存储了10个元素,那么(有效地)将7个空值添加到结尾,然后Arrays.sort()不能对字符串排序null元素。

答案 5 :(得分:1)

它无法处理最初创建数组时存在的空字符串。 要避免明确地将all全部设为“”,要么尽可能多地分配。

虽然不知道这是否是API级别的错过,因为他们可以满足空对象(我们通过SQL orderby获取的方式),或者还有更多内容。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

数组有10个项目,但你只放3个。所以,其他7都是NULL。请考虑使用ArrayList。

答案 8 :(得分:-1)

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

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

这些空值会在排序时导致Null Pointer问题。