# Sort an Array of Triplet using Java Comparable and Comparator

• Difficulty Level : Hard
• Last Updated : 09 Mar, 2022

Given an array of integer Triplet. you have to sort the array in ascending order with respect to the last element in the triplet.

Examples:

```Input:  { {1, 2, 3}, {2, 2, 4}, {5, 6, 1}, {10, 2, 10} }
Output:  { {5, 6, 1}, {1, 2, 3}, {2, 2, 4}, {10, 2, 10} }

Input:  { {10, 20, 30}, {40, -1, 2}, {30, 10, -1}, {50, 10, 50} }
Output:  { {30, 18, -1}, {40, -1, 2}, {10, 20, 30}, {50, 10, 50} }```

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

### Method 1: Using Comparable Interface

• In this method, we are going to implement the Comparable interface from java.lang Package in the Triplet class.
• The Comparable interface contains the method compareTo to decide the order of the elements.
• Override the compareTo method in the Triplet class.
• Create an array of Triplet and populate the array.
• Use the Arrays.sort() function to sort the array.

## Java

 `import` `java.io.*;``import` `java.util.*;` `class` `Triplet ``implements` `Comparable {``    ``int` `x;``    ``int` `y;``    ``int` `z;``  ` `    ``public` `Triplet(``int` `x,``int` `y,``int` `z){``        ``this``.x = x;``        ``this``.y = y;``        ``this``.z = z;``    ``}` `    ``public` `String toString() {``        ``return` `"("` `+ x + ``","` `+ y + ``","` `+ z + ``")"``;``    ``}``    ` `      ``// Overriden method to compare``      ``// values of the last element.``    ``public` `int` `compareTo(Triplet a){``        ``return` `this``.z - a.z;``    ``}``}` `class` `GFG {``    ``public` `static` `void` `main (String[] args) {    ``      ` `        ``int` `n = ``4``;``        ``Triplet arr[] = ``new` `Triplet[n];` `        ``arr[``0``] = ``new` `Triplet(``1``, ``2``, ``3``);``        ``arr[``1``] = ``new` `Triplet(``2``, ``2``, ``4``);``        ``arr[``2``] = ``new` `Triplet(``5``, ``6``, ``1``);``        ``arr[``3``] = ``new` `Triplet(``10``, ``2``, ``10``);`` ` `          ``// Sorting the array``        ``Arrays.sort(arr);   ``          ` `          ``// printing the``          ``// Triplet array``          ``print(arr);           ``    ``}``  ` `      ``public` `static` `void` `print(Triplet[] arr){``        ``for``(``int` `i = ``0``;i < arr.length;i++){``            ``System.out.println(arr[i]);``        ``}``    ``}``}`

Output:

```(5,6,1)
(1,2,3)
(2,2,4)
(10,2,10)```

### Method 2: Using Comparator Interface

• In this method, we create a separate Compare class that implements Comparator Interface
• The Comparable interface contains the method compared to order the elements.
• Override the compare method in the Compare class.
• Create an array of Triplet and populate the array.
• Use the Arrays.sort() function to sort the array and pass an object of Compare class.

## Java

 `import` `java.io.*;``import` `java.util.*;` `class` `Triplet {``    ``int` `x;``    ``int` `y;``    ``int` `z;``    ``public` `Triplet(``int` `x,``int` `y,``int` `z){``        ``this``.x = x;``        ``this``.y = y;``        ``this``.z = z;``    ``}``      ``public` `String toString() {``        ``return` `"("` `+ x + ``","` `+ y + ``","` `+ z + ``")"``;``    ``}``}` `class` `Compare ``implements` `Comparator{` `    ``// Overriden compare method to``      ``// compare objects for sorting.``    ``public` `int` `compare(Triplet a,Triplet b){``        ``return` `a.z - b.z;``    ``}``}` `class` `GFG {``    ``public` `static` `void` `main (String[] args) {    ``      ` `        ``int` `n = ``4``;``        ``Triplet arr[] = ``new` `Triplet[n];` `        ``arr[``0``] = ``new` `Triplet(``10``, ``20``, ``30``);``        ``arr[``1``] = ``new` `Triplet(``40``, -``1``, ``2``);``        ``arr[``2``] = ``new` `Triplet(``30``, ``18``, -``1``);``        ``arr[``3``] = ``new` `Triplet(``50``, ``10``, ``50``);`` ` `          ``// Sorting the array by passing``          ``// Compare object``        ``Arrays.sort(arr, ``new` `Compare());   ``      ` `        ``// printing the Triplet array``          ``print(arr);           ``    ``}``  ` `      ``public` `static` `void` `print(Triplet[] arr){``        ``for``(``int` `i = ``0``;i < arr.length;i++){``            ``System.out.println(arr[i]);``        ``}``    ``}``}`

Output:

```(30,18,-1)
(40,-1,2)
(10,20,30)
(50,10,50)```

In this article, we sorted a user-defined triplet by using java comparable and comparator interface. Remember, the same can be implemented for any element in the triplet just by the change the variable name in the overridden class methods in the compareTo and compare.

My Personal Notes arrow_drop_up