Sorting

Basics of Sorting

  • Sorting is a useful operation on ArrayLists which allows you to arrange the elements in either ascending or descending order.
  • The java.util.Collections class in Java provides multiple sorting methods for ArrayLists.
  • Remember to import java.util.Collections when you need to sort ArrayLists in your programs.

Sorting an ArrayList

  • The simplest way is to use the sort() method provided by java.util.Collections which sorts data in ascending order by default.
  • The format is: Collections.sort(listName);.
  • The data type of ArrayList elements needs to support the compareTo() method as the sort() method works by comparing elements.
  • For primitive types like Integer and String, which have natural ordering, they implement the Comparable interface and hence sort() can be used directly.

Sorting in Descending Order

  • If you want to sort in descending order, you also use sort() but with a Collections.reverseOrder() argument.
  • The format is: Collections.sort(listName, Collections.reverseOrder());.
  • Specially, for numerical data types, this will result in a list sorted from highest to lowest values.

Custom Sorting with Comparator

  • Java allows you to define your own sorting rules with Comparator.
  • You can define a new Comparator instance, overriding the compare() method to specify how two elements should be compared.
  • The custom comparator can then be passed to the sort() method as an argument.
  • For example, if we have an ArrayList of custom objects, we can create a Comparator that compares objects based on a specific attribute:
Collections.sort(listName, new Comparator<CustomObject>() {
    @Override
    public int compare(CustomObject o1, CustomObject o2) {
        return o1.getAttribute().compareTo(o2.getAttribute());
    }
});

Always keep in mind: sorting can greatly enhance the usability and efficiency of your data structures, but also adds a computational cost. Use wisely!