tags:

views:

412

answers:

8

Hi

this is a rather basic java question

I have an array containing String that i want to sort using java.util.Arrays.sort

when i write

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

it gets sorted correctly

however when i have

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

java.util.Arrays.sort(myArray);

sort throws a nullreferenceexception

i'm pretty sure its something really dumb i just dont get right now. I have to new the String, because hardcoding default values doesnt get anyone, anywhere.

+7  A: 

When you initialize the second array, you only initialize the first three elements. The other elements are initialized to null and thus can't be sorted.

Kevin
+1  A: 

What happens is that when you have the array that has ten items, the other items are uninitialized. So when the sort algorithm works, it tries to take the value of the string, but instead gets nothing, and throws the exception.

You need to make sure that you don't try to sort an array that has more space than things you place into it.

Uri
+1  A: 

I think that since you make myArray store 10 elements, it's (effectively) adding 7 nulls to the end, and then Arrays.sort() can't sort a null element against a string.

Ben Alpert
A: 

You defining the array size by 10 but only initializing 3 indexes. Change your array size to 3 or initialize all ten.

Bhushan
A: 

The array has 10 items, but you only put 3 inside. So, the other 7 are NULL. Consider using a ArrayList instead.

Isaac Waller
It would give you a NullPointer even in ArrayList, in case you have a null object in there. Because it uses Arrays.sort() somewhere down the road. If you mean something else, then its fine. No -ve for this as I am not sure what you mean.
Adeel Ansari
+1  A: 

It cant work on null strings which are there when you initially create the Array. To avoid either explicitly make all as "" or else assign as much as require.

Although dont know whether this is a miss at API level as they could have catered for the null object (the way we get in SQL orderby) or is there something more to it.

Nrj
+3  A: 

In the source, the method uses compareTo() as a sort condition. Obviously, invoking compareTo() on null, will raise a NullPointerException. As its mentioned in Java Docs that,

All elements in the array must be mutually comparable (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the array)

Of course here its not about ClassCastException, but invocation of comapreTo() is obvious.

[Edited]

P.S. Figuring this out from Exception Stack Trace is your best bet.

Adeel Ansari
+2  A: 

try the following to sort just the first three elements.

Arrays.sort(myArray, 0, 3);
Peter Lawrey