In this article, we will discuss how to sort Arrays using Arrays class’s utility sort() method
Sorting Arrays using Comparable and Comparator :
- Default Natural Sorting Order for primitive type Arrays
- java.lang.Comparable interface –> for natural-ordering of Object[] Arrays
- java.util.Comparator interface –> for customized-sorting of Object[] Arrays
Cautions:
- For primitive types, only default natural ordering is possible
- For objects, both default natural ordering as well as customized sorting is possible using Comparable and Comparator interfaces
1. Natural-ordering for primitive-type Arrays
Method signature:
public static void sort(primitive[] p);
PrimitveNaturalSortingOfArrays.java
package in.bench.resources.java.collection;
import java.util.Arrays;
public class PrimitveNaturalSortingOfArrays {
public static void main(String[] args) {
Integer[] intArrays = {31, 83, 53, 97, 29, 7, 13, 47, 79};
String[] strArrays = {
"James",
"Bond",
"Michael",
"Pups",
"Jackson",
"Bird"
};
System.out.println("Before sorting: Integer Arrays\n");
// printing Integer Arrays
System.out.println(Arrays.toString(intArrays));
// sorting Arrays using
Arrays.sort(intArrays);
System.out.println("\nAfter sorting: Integer Arrays\n");
// printing Integer Arrays
System.out.println(Arrays.toString(intArrays));
System.out.println("\n\n\nBefore sorting: String Arrays\n");
// printing Integer Arrays
System.out.println(Arrays.toString(strArrays));
// sorting Arrays using
Arrays.sort(strArrays);
System.out.println("\nAfter sorting: String Arrays\n");
// printing Integer Arrays
System.out.println(Arrays.toString(strArrays));
}
}
Output:
Before sorting: Integer Arrays
[31, 83, 53, 97, 29, 7, 13, 47, 79]
After sorting: Integer Arrays
[7, 13, 29, 31, 47, 53, 79, 83, 97]
Before sorting: String Arrays
[James, Bond, Michael, Pups, Jackson, Bird]
After sorting: String Arrays
[Bird, Bond, Jackson, James, Michael, Pups]
2. Natural ordering for Object[] Arrays using Comparable :
Method signature:
public static void sort(Object[] objectArray);
Customer.java
- Customer POJO with 2 member variables of Integer and String type
- which implements Comparable interface to provide natural-ordering of Customer objects on the basis of customer name
package in.bench.resources.java.collection;
public class Customer implements Comparable<Customer> {
// member variables
int customerId;
String customerName;
// 2-arg parameterized constructor
public Customer(int customerId, String customerName) {
super();
this.customerId = customerId;
this.customerName = customerName;
}
// override toString() method
@Override
public String toString() {
return "["
+ "Id=" + customerId
+ ", Name=" + customerName
+ "]";
}
// override compareTo() method
@Override
public int compareTo(Customer o) {
return this.customerName.compareTo(o.customerName);
}
}
Main class
- This class uses above customer POJO to store objects inside Customer[] Arrays and
- Prints Customer[] Arrays in Ascending-order of Customer Names
NaturalSortingOfObjectArrays.java
package in.bench.resources.java.collection;
import java.util.Arrays;
public class NaturalSortingOfObjectArrays {
public static void main(String[] args) {
// creating Customer Arrays of initial size 4
Customer[] customers = new Customer[4];
// initializing each customer objects
customers[0] = new Customer(102, "Nandan Nilekeni");
customers[1] = new Customer(104, "Shibulal");
customers[2] = new Customer(101, "Narayan Murthy");
customers[3] = new Customer(103, "Kris Gopalakrishnan");
System.out.println("Before sorting: Customer Arrays\n");
// printing Integer Arrays
System.out.println(Arrays.toString(customers));
// sorting Arrays using
Arrays.sort(customers);
System.out.println("\nAfter sorting: Customer Arrays "
+ "according to ascending order of names\n");
// printing Integer Arrays
System.out.println(Arrays.toString(customers));
}
}
Output:
Before sorting: Customer Arrays
[
[Id=102, Name=Nandan Nilekeni], [Id=104, Name=Shibulal],
[Id=101, Name=Narayan Murthy], [Id=103, Name=Kris Gopalakrishnan]
]
After sorting: Customer Arrays acc. to ascending order of names
[
[Id=103, Name=Kris Gopalakrishnan], [Id=102, Name=Nandan Nilekeni],
[Id=101, Name=Narayan Murthy], [Id=104, Name=Shibulal]
]
3. Customized Sorting for Object[] Arrays using Comparator :
Method signature:
public static void sort(Object[] objectArray, Comparator<Object> c);
Customer.java
- Customer POJO with 2 member variables of Integer and String type
- 2-arg constructor
- Overriding toString() method
package in.bench.resources.java.collection;
public class Customer {
// member variables
int customerId;
String customerName;
// 2-arg parameterized constructor
public Customer(int customerId, String customerName) {
super();
this.customerId = customerId;
this.customerName = customerName;
}
// override toString() method
@Override
public String toString() {
return "["
+ "Id=" + customerId
+ ", Name=" + customerName
+ "]";
}
}
CustomerIdComparator.java
- This is separate class which implements Comparator interface providing customized sorting logic
- compare() method provides sorting logic, according to Ascending-order of Customer Id
package in.bench.resources.java.collection;
import java.util.Comparator;
public class CustomerIdComparator implements Comparator<Customer> {
@Override
public int compare(Customer o1, Customer o2) {
return o1.customerId - o2.customerId;
}
}
Main class
- This class uses above Customer POJO and customized sorting logic class
- implementing Comparator interface, to store objects inside Customer[] Arrays
- Sorting according to Comparator (i.e.; natural ordering of Customer Id)
- Prints Customer objects in Ascending-order of Customer Id
CustomizedSortingOfObjectArrays.java
package in.bench.resources.java.collection;
import java.util.Arrays;
public class CustomizedSortingOfObjectArrays {
public static void main(String[] args) {
// creating Customer Arrays of initial size 4
Customer[] customers = new Customer[4];
// initializing each customer objects
customers[0] = new Customer(102, "Nandan Nilekeni");
customers[1] = new Customer(104, "Shibulal");
customers[2] = new Customer(101, "Narayan Murthy");
customers[3] = new Customer(103, "Kris Gopalakrishnan");
System.out.println("Before sorting: Customer Arrays\n");
// printing Integer Arrays
System.out.println(Arrays.toString(customers));
// sorting Arrays using
Arrays.sort(customers, new CustomerIdComparator());
System.out.println("\nAfter sorting: Customer Arrays "
+ "according to ascending order of Id\n");
// printing Integer Arrays
System.out.println(Arrays.toString(customers));
}
}
Output:
Before sorting: Customer Arrays
[
[Id=102, Name=Nandan Nilekeni], [Id=104, Name=Shibulal],
[Id=101, Name=Narayan Murthy], [Id=103, Name=Kris Gopalakrishnan]
]
After sorting: Customer Arrays acc. to ascending order of Id
[
[Id=101, Name=Narayan Murthy], [Id=102, Name=Nandan Nilekeni],
[Id=103, Name=Kris Gopalakrishnan], [Id=104, Name=Shibulal]
]
Related Articles:
- Byte Arrays sorting
- char Arrays sorting
- short Arrays sorting
- Integer Arrays sorting
- Float Arrays sorting
- Double Arrays sorting
- Long Arrays sorting
- String Arrays sorting
- Java – How to Sort Arrays in Ascending and Descending order ?
- Java – String Arrays sorting in ascending & descending order
- Java – Sorting after merging two String[] Arrays
- Java – Sorting Arrays using Comparable and Comparator interface
- Java – How to Sort String[] arrays by its length in Ascending and Descending order ?
References:
- https://docs.oracle.com/javase/tutorial/collections/intro/
- https://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
- https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html
- https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
- https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html
- https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html
Happy Coding !!
Happy Learning !!