El mètode Arrays.sort() de Java s'utilitza per ordenar els elements d'una matriu.
- Proporciona opcions flexibles per ordenar matrius senceres subarrays o fins i tot objectes personalitzats mitjançant comparadors.
- Pot ordenar tant matrius primitives (car int, etc.) com matrius d'objectes (cadena enter, etc.).
Exemple: Ordenant matrius d'enters i caràcters en ordre ascendent
Java
import java.util.Arrays; class Geeks{ public static void main(String[] args) { // Integer array int[] arr1 = {2 -1 3 4}; // Character array char[] arr2 = {'b' 'a' 'c' 'b'}; // Sorting arrays in ascending order Arrays.sort(arr1); Arrays.sort(arr2); // Print sorted arrays System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }
Sortida
[-1 2 3 4] [a b b c]
Explicació:
- Arrays.sort() reordena els elements en ordre ascendent.
- Els duplicats no s'eliminen.
- Les matrius primitives no poden utilitzar comparadors personalitzats.
Sintaxi del mètode Arrays.sort().
1. Per ordenar tota la matriu
Arrays.sort();
2. Ordenar un subbarrat
public static void sort(int[] arr int from_Index int to_Index) ;
Paràmetres:
- arr : La matriu que s'ha d'ordenar.
- de_índex: L'índex del primer element (inclòs) que s'ha d'ordenar.
- a_indexar : L'índex de l'últim element (exclusiu) a ordenar.
- Tipus de retorn: void (Aquest mètode no retorna res).
Nota:
- Arrays.sort() no elimina els duplicats; només reordena elements.
- Els tipus primitius no poden utilitzar comparadors personalitzats; l'ordenació és en ordre natural (creixent).
Exemple: Ordenació de Subbarray
Podeu ordenar una part d'una matriu especificant els índexs d'inici (inclosos) i finals (exclusius).
Java
import java.util.Arrays; public class Geeks{ public static void main(String[] args){ int[] arr = {2 -1 4 3}; // Sort elements from index 1 to 3 Arrays.sort(arr 1 4); // Print array after sorting subarray System.out.println(Arrays.toString(arr)); } }
Sortida
[2 -1 3 4]
Explicació: Només s'ordenen els elements dels índexs 1 2 i 3; l'element de l'índex 0 es manté sense canvis.
Ordenació per ordre descendent
Per ordenar una matriu en ordre descendent podem utilitzar el mètode Arrays.sort() amb Collections.reverseOrder() com a comparador.
Javaimport java.util.Arrays; import java.util.Collections; public class Geeks{ public static void main(String[] args) { // Integer array Integer[] arr = {2 -1 3 4}; Arrays.sort(arr Collections.reverseOrder()); System.out.println(Arrays.toString(arr)); // String array String[] str = {'Hii' 'Vishnu' 'chauhan'}; Arrays.sort(str Collections.reverseOrder()); System.out.println(Arrays.toString(str)); } }
Sortida
[4 3 2 -1] [chauhan Vishnu Hii]
Explicació:
- Només funciona amb matrius d'objectes; Els tipus primitius (int) no poden utilitzar comparadors.
- Per a les cadenes, ordena lexicogràficament des de Z -> A.
Classificació personalitzada amb comparador
Podem ordenar una matriu d'objectes definint una lògica d'ordenació personalitzada amb l'ajuda de l' Interfície de comparació .
Javaimport java.util.*; // Custom class class Student{ int roll; String name; String address; Student(int roll String name String address){ this.roll = roll; this.name = name; this.address = address; } // Print student details public String toString() { return roll + ' ' + name + ' ' + address; } } // Comparator to sort by roll number class SortByRoll implements Comparator<Student>{ public int compare(Student s1 Student s2){ return s1.roll - s2.roll; } } class Geeks { public static void main(String[] args){ Student[] students = { new Student(1 'Ram' 'MP') new Student(2 'Shyam' 'UP') new Student(3 'Hari' 'Delhi') }; // Sort using custom comparator Arrays.sort(students new SortByRoll()); // Print sorted students for (Student s : students) System.out.println(s); } }
Sortida
1 Ram MP 2 Shyam UP 3 Hari Delhi
Explicació:
- El comparador permet una lògica d'ordenació personalitzada sense modificar la classe.
- Aquí els alumnes estan ordenats per número de rotlle.
Classificació natural amb interfície comparable
A l'exemple següent, ordenem una matriu d'objectes Student en funció del seu nom alfabèticament.
Javaimport java.util.Arrays; class Student implements Comparable<Student>{ int r; String n; String a; // Constructor public Student(int r String n String a){ this.r = r; this.n = n; this.a = a; } // compareTo method to sort by name public int compareTo(Student o){ return this.n.compareTo(o.n); } // toString() method to print Student details public String toString() { return this.r + ' ' + this.n + ' ' + this.a; } } public class Geeks{ public static void main(String[] args){ Student[] s = { new Student(1 'Ram' 'UP') new Student(2 'Shyam' 'MP') new Student(3 'Hari' 'Bihar') }; // Sorting students by name in alphabetical order Arrays.sort(s); for (Student student : s) System.out.println(student); } }
Sortida
3 Hari Bihar 1 Ram UP 2 Shyam MP
Explicació:
- En aquest exemple fem servir el Interfície comparable per definir un ordre natural per als objectes Student.
- Mitjançant la implementació del mètode, especifiquem com s'han de comparar dos objectes Student habilitant l'ordenació en funció del nom de l'estudiant.
Això ens permet utilitzar el mètode Arrays.sort() directament en una matriu d'objectes Student per ordenar-los en un ordre i aquí no necessitem un comparador separat.