Arrays.sort() în Java

Arrays.sort() în Java
Încercați-l pe GfG Practice

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