• Menu
  • Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

JavaBeat

Java Tutorial Blog

  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)
  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)

Sorting Custom Types in Java

September 25, 2007 //  by Krishna Srinivasan//  Leave a Comment

The class java.util.Collections provides many Utility methods for simplifying the most commonly used operations. One of the methods available in that class is sort() which is used for sorting elements. Let us the see how the Collections.sort() method operates on pre-defined data-types as well as user-defined data-types.

also read:

  • Java Tutorials
  • Java EE Tutorials
  • Design Patterns Tutorials
  • Java File IO Tutorials

Consider the following code snippet that will sort a list of numbers.

List<integer> numbers = Arrays.asList(1, 5, -4);
Collections.sort(numbers);
System.out.println(numbers);

The method Arrays.asList() creates a new ArrayList object and then populates the list with elements 1, 5 and -4. Then a call is made to Collections.sort() method by passing the collection object. The sort() method directly modifies the collection object after the sorting operation.

What will happen if the Collections.sort() method is passed with a List of user-defined objects? Now, it is the programmer’s responsibility to provide a hint to the sort() method on how sorting has to be done on user-defined objects. Given two user-defined objects o1 and o2, it should be mentioned how to determine whether two objects are equal , whether o1 is greater than o2 or o1 is smaller than o2. So, this can be specified to the Collections.sort() method. There is one more variation of the Collections.sort() that accepts two arguments, one is the list of objects to be sorted and the other is a Comparator object that contains the essential logic for sorting.

Consider the following Movie class, and we want objects of this Movie class to be sorted based on their rank.

Movie.java

package tips.sort;

public class Movie{

    private String name;
    private int rank;

    public Movie(String name, int rank){
        this.name = name;
        this.rank = rank;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

    public String toString(){
        return name + ':' + rank;
    }
}

Now, let us define the Comparator class that contains the necessary information which in turn can be picked up by the Collections.sort() to perform the sorting operation. Given below is the code for the MovieComparator class,

MovieComparator.java

package tips.sort;

import java.util.Comparator;

public class MovieComparator implements Comparator<movie>{

    @Override
    public int compare(Movie movie1, Movie movie2) {

        int rank1 = movie1.getRank();
        int rank2 = movie2.getRank();

        if (rank1 > rank2){
            return +1;
        }else if (rank1 < rank2){
            return -1;
        }else{
            return 0;
        }
    }
}

Note the use of typed parameter ; in the class declaration of the MovieComparator. Since the actual typed parameter is Movie, the compare() method is made to accept arguments of type Movie. Now, let us see how the implementation is made for the compare() method. For any two movie objects, it checks for their ranks. If the rank for the movie1 is greater than the rank for movie2, then 1 is returned. It means that during the sorting operation movie1 object comes before movie2. If the rank for movie1 is lesser than movie2, then -1 is returned, in which case, movie1 comes after movie2. If the rank for the two objects is equal, then sorting operation does not happen.

The following code makes use of the above classes to perform the sorting operation. Some Movie objects are populated and then passed on to the Collections.sort() method along with the MovieComparator object.

SortingTest.java

package tips.sort;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SortingTest {

    public static void main(String[] args) {

        List<movie> movies = new ArrayList<movie>();
        movies.add(new Movie("Harry Potter", 3));
        movies.add(new Movie("Transformer", 4));
        movies.add(new Movie("True Lies", 1));
        movies.add(new Movie("Rush Hour- III", 2));
        movies.add(new Movie("Golden Eye", 5));

        MovieComparator comparator = new MovieComparator();
        Collections.sort(movies, comparator);

        for(Movie aMovie : movies){
            System.out.println(aMovie);
        }
    }
}

The output for the above program is given below,

True Lies:1
Rush Hour- III:2
Harry Potter:3
Transformer:4
Golden Eye:5

Category: JavaTag: Core Java

About Krishna Srinivasan

He is Founder and Chief Editor of JavaBeat. He has more than 8+ years of experience on developing Web applications. He writes about Spring, DOJO, JSF, Hibernate and many other emerging technologies in this blog.

Previous Post: « jUDDI and Configuration in jBoss and MySQL database
Next Post: Randomly accessing the file contents »

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Primary Sidebar

Follow Us

  • Facebook
  • Pinterest

FEATURED TUTORIALS

New Features in Spring Boot 1.4

Difference Between @RequestParam and @PathVariable in Spring MVC

What is new in Java 6.0 Collections API?

The Java 6.0 Compiler API

Introductiion to Jakarta Struts

What’s new in Struts 2.0? – Struts 2.0 Framework

JavaBeat

Copyright © by JavaBeat · All rights reserved
Privacy Policy | Contact