Sort list Object Java

DZone > Java Zone > How To Sort Objects In Java

How To Sort Objects In Java

Any Java developer worth their salt has used the Collection framework. Here is a simple tutorial that explains how to sort in Java.

by
Biplab Pal
·
Feb. 27, 18 · Java Zone · Tutorial
Like [25]
Comment
Save
Tweet
171.64K Views

Join the DZone community and get the full member experience.

Join For Free

It is almost impossible toimagine a Java developer who has not used or using Collection framework. In Collection framework, mostly used classes are ArrayList from List interfaceand HashSet, TreeSet from Set interface and we do often deal with sorting these Collections.

In this article, I will be mainly focusing on sorting ArrayList, HashSet, TreeSet from Collectionand last but not the least the array.

Let's see how to sort a given collection of integers[5,10,0,-1]:

Data [Integers] stored in ArrayList.

private void sortNumbersInArrayList[] { List integers = new ArrayList[]; integers.add[5]; integers.add[10]; integers.add[0]; integers.add[-1]; System.out.println["Original list: " +integers]; Collections.sort[integers]; System.out.println["Sorted list: "+integers]; Collections.sort[integers, Collections.reverseOrder[]]; System.out.println["Reversed List: " +integers]; }

Output is:

Original list: [5, 10, 0, -1] Sorted list: [-1, 0, 5, 10] Reversed List: [10, 5, 0, -1]

Data [Integers] Stored in HashSet

private void sortNumbersInHashSet[] { Set integers = new HashSet[]; integers.add[5]; integers.add[10]; integers.add[0]; integers.add[-1]; System.out.println["Original set: " +integers]; // Collections.sort[integers]; This throws error since sort method accepts list not collection List list = new ArrayList[integers]; Collections.sort[list]; System.out.println["Sorted set: "+list]; Collections.sort[list, Collections.reverseOrder[]]; System.out.println["Reversed set: " +list]; }

Output is:

Original set: [0, -1, 5, 10] Sorted set: [-1, 0, 5, 10] Reversed set: [10, 5, 0, -1]

In this example [Data[Integers] stored in HashSet], we saw that HashSet is converted toArrayList to sort. Without converting to ArrayList, sorting can be achieved by using TreeSet. TreeSetis another implementation ofSet and is sorted[ordered] using their natural ordering when the Set is created with the default constructor.

Data [Integers] Stored in TreeSet

private void sortNumbersInTreeSet[] { Set integers = new TreeSet[]; integers.add[5]; integers.add[10]; integers.add[0]; integers.add[-1]; System.out.println["Original set: " + integers]; System.out.println["Sorted set: "+ integers]; Set reversedIntegers = new TreeSet[Collections.reverseOrder[]]; reversedIntegers.add[5]; reversedIntegers.add[10]; reversedIntegers.add[0]; reversedIntegers.add[-1]; System.out.println["Reversed set: " + reversedIntegers]; }

Output is:

Original set: [-1, 0, 5, 10] Sorted set: [-1, 0, 5, 10] Reversed set: [10, 5, 0, -1]

In this case "Original set:" and "Sorted set:"both are same since we have used a TreeSet which stores data in sorted order, we didn't sort it after inserting.

So far everything seems to be working as expected and we are good at sorting. Now let's try to store a custom Object [say Student] in the various Collection and see how sorting works.

Data[Students] Stored in ArrayList

private void sortStudentInArrayList[] { List students = new ArrayList[]; Student student1 = createStudent["Biplab", 3]; students.add[student1]; Student student2 = createStudent["John", 1]; students.add[student2]; Student student3 = createStudent["Pal", 5]; students.add[student3]; Student student4 = createStudent["Biplab", 2]; students.add[student4]; System.out.println["Original students list: " + students]; Collections.sort[students];// Error here System.out.println["Sorted students list: " + students]; Collections.sort[students, Collections.reverseOrder[]]; System.out.println["Reversed students list: " + students]; } private Student createStudent[String name, int no] { Student student = new Student[]; student.setName[name]; student.setNo[no]; return student; } public class Student { String name; int no; public String getName[] { return name; } public int getNo[] { return no; } public void setName[String name] { this.name = name; } public void setNo[int no] { this.no = no; } @Override public String toString[] { return "Student{" + "name='" + name + '\'' + ", no=" + no + '}'; } }

This throws compile time error with below error message :

sort[java.util.List] in Collections cannot be applied to [java.util.List] reason: no instance[s] of type variable[s] T exist so that Student conforms to Comparable

Chủ Đề