The ArrayList class does not have any method to sort the objects stored in it.So we have can use
java.util.Collections.sort(aList);
where aList is an ArrayList instance. But the question arises as to how the sorting is being done by the sort method of Collections class in Java.
If one looks at the code of sort method of Collections class in Java API then we can see the following code:
The sort method of Arrays class is being called so we see the code for sort method in the Arrays class:
Here we see that the mergeSort is being used as:
java.util.Collections.sort(aList);
where aList is an ArrayList instance. But the question arises as to how the sorting is being done by the sort method of Collections class in Java.
If one looks at the code of sort method of Collections class in Java API then we can see the following code:
1 2 3 4 5 6 7 8 9 | public static void sort(List list) { Object a[] = list.toArray(); Arrays.sort(a); ListIterator i = list.listIterator(); for ( int j= 0 ; j< a.length; j++) { i.next(); i.set(a[j]); } } |
1 2 3 4 | public static void sort(Object[] a) { Object aux[] = (Object[])a.clone(); mergeSort(aux, a, 0 , a.length, 0 ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private static void mergeSort(Object src[], Object dest[], int low, int high, int off) { int length = high - low; // Insertion sort on smallest arrays if (length < INSERTIONSORT_THRESHOLD) { for ( int i=low; i ((Comparable)dest[j- 1 ]).compareTo((Comparable)dest[j])> 0 ; j--) swap(dest, j, j- 1 ); return ; } ......... } From the above code we see that the Comparable interface is being used and hence we can conclude that the sort method of Collections class assumes that the objects present inside the ArrayList being passed to it have the Comparable interface being implemented. But one more question arises here that what if the class whose objects are stored in ArrayList does not implement the Comparable interface then what will happen. The result will be no compiler error but you will get a runtime exception. This is illustrated below:
java.lang.ClassCastException at example.java.Foo.main(Foo.java:11) Exception in thread "main" To avoid such a situation, you can either make the class to implement Comparable interface or supply a Comparator instance when calling the sort method of Collections class in Java API. |
Comments
Post a Comment