Arrays.sort() în Java
Metoda Arrays.sort() din Java este folosită pentru a sorta elementele unui tablou.
- Oferă opțiuni flexibile pentru a sorta matrice întregi submatrice sau chiar obiecte personalizate folosind comparatoare.
- Poate sorta atât matrice primitive (int char etc.) cât și matrice obiect (Integer String etc.).
Exemplu: Sortarea matricelor întregi și de caractere în ordine crescătoare
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 )); } }
Ieșire
[-1 2 3 4] [a b b c]
Explicaţie:
- Arrays.sort() reordonează elementele în ordine crescătoare.
- Duplicatele nu sunt eliminate.
- Matricele primitive nu pot folosi comparatoare personalizate.
Sintaxa metodei Arrays.sort().
1. Pentru a sorta întregul tablou
Arrays.sort();
2. A sorta un subbaraj
public static void sort(int[] arr int from_Index int to_Index) ;
Parametri:
- arr : Matricea de sortat.
- din_Index: Indexul primului element (inclusiv) de sortat.
- la_indexare : Indexul ultimului element (exclusiv) de sortat.
- Tip returnare: void (Această metodă nu returnează nimic).
Nota:
- Arrays.sort() nu elimină duplicatele; reordonează doar elemente.
- Tipurile primitive nu pot folosi comparatoare personalizate; sortarea este în ordine naturală (crescătoare).
Exemplu: Sortarea Subbarray
Puteți sorta o porțiune a unui tablou specificând indici de început (inclusiv) și de final (exclusiv).
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 )); } }
Ieșire
[2 -1 3 4]
Explicaţie: Sunt sortate doar elementele de la indicii 1 2 și 3; elementul de la indicele 0 rămâne neschimbat.
Sortare în ordine descendentă
Pentru a sorta o matrice în ordine descrescătoare putem folosi metoda Arrays.sort() cu Collections.reverseOrder() ca comparator.
Java import 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 )); } }
Ieșire
[4 3 2 -1] [chauhan Vishnu Hii]
Explicaţie:
- Funcționează numai pe matrice de obiecte; tipurile primitive (int) nu pot folosi comparatori.
- Pentru Strings sortează lexicografic de la Z -> A.
Sortare personalizată cu Comparator
Putem sorta o serie de obiecte definind o logică de sortare personalizată cu ajutorul utilizării Interfață de comparație .
Java import 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 ); } }
Ieșire
1 Ram MP 2 Shyam UP 3 Hari Delhi
Explicaţie:
- Comparatorul permite logica de sortare personalizată fără modificarea clasei.
- Aici elevii sunt sortați după numărul de rolă.
Sortare naturală cu interfață comparabilă
În exemplul de mai jos sortăm o matrice de obiecte Student pe baza numelui lor alfabetic.
Java import 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 ); } }
Ieșire
3 Hari Bihar 1 Ram UP 2 Shyam MP
Explicaţie:
- În acest exemplu folosim Interfață comparabilă pentru a defini o ordonare naturală pentru obiectele Student.
- Prin implementarea metodei, specificăm modul în care două obiecte Student ar trebui să fie comparate prin activarea sortării pe baza numelui studentului.
Acest lucru ne permite să folosim metoda Arrays.sort() direct pe o matrice de obiecte Student pentru a le sorta într-o ordine și aici nu avem nevoie de un comparator separat.
Creați un test