Arrays.sort() in Java

Arrays.sort() in Java
Provalo su GfG Practice

Il metodo Arrays.sort() in Java viene utilizzato per ordinare gli elementi di un array.

  • Fornisce opzioni flessibili per ordinare interi sottoarray di array o persino oggetti personalizzati utilizzando comparatori.
  • Può ordinare sia gli array primitivi (int char ecc.) che gli array di oggetti (Integer String ecc.).

Esempio: Ordinamento di matrici di numeri interi e di caratteri in ordine crescente

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  ));      }   }   

Produzione
[-1 2 3 4] [a b b c]  

Spiegazione:

  • Arrays.sort() riordina gli elementi in ordine crescente.
  • I duplicati non vengono rimossi.
  • Gli array primitivi non possono utilizzare comparatori personalizzati.

Sintassi del metodo Arrays.sort()

1. Per ordinare l'intero array

Array.sort(); 

2. Per ordinare un sottoarray

public static void sort(int[] arr int from_Index int to_Index) ;

parametri:

  • arr : l'array da ordinare.
  • da_Indice: L'indice del primo elemento (incluso) da ordinare.
  • a_Indice : L'indice dell'ultimo elemento (esclusivo) da ordinare.
  • Tipo di reso: void (questo metodo non restituisce nulla).

Nota:

  • Arrays.sort() non rimuove i duplicati; riordina solo gli elementi.
  • I tipi primitivi non possono utilizzare comparatori personalizzati; l'ordinamento è in ordine naturale (ascendente).

Esempio: ordinamento del sottoarray

È possibile ordinare una parte di un array specificando gli indici iniziale (inclusivo) e finale (esclusivo).

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  ));      }   }   

Produzione
[2 -1 3 4]  

Spiegazione: Vengono ordinati solo gli elementi agli indici 1 2 e 3; l'elemento all'indice 0 rimane invariato.

Ordinamento in ordine discendente

Per ordinare un array in ordine decrescente possiamo utilizzare il metodo Arrays.sort() con Collections.reverseOrder() come comparatore.

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  ));      }   }   

Produzione
[4 3 2 -1] [chauhan Vishnu Hii]  

Spiegazione:

  • Funziona solo su array di oggetti; i tipi primitivi (int) non possono utilizzare comparatori.
  • Per le stringhe ordina lessicograficamente da Z -> A.

Ordinamento personalizzato con comparatore

Possiamo ordinare una serie di oggetti definendo una logica di ordinamento personalizzata con l'aiuto dell'utilizzo di  Interfaccia comparatore .

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  );      }   }   

Produzione
1 Ram MP 2 Shyam UP 3 Hari Delhi  

Spiegazione:

  • Il comparatore consente una logica di ordinamento personalizzata senza modificare la classe.
  • Qui gli studenti sono ordinati per numero di ruolo.

Ordinamento naturale con interfaccia comparabile

Nell'esempio seguente ordiniamo un array di oggetti Student in base al loro nome in ordine alfabetico.

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  );      }   }   

Produzione
3 Hari Bihar 1 Ram UP 2 Shyam MP  

Spiegazione:

  • In questo esempio usiamo il Interfaccia comparabile per definire un ordinamento naturale per gli oggetti Studente.
  • Implementando il metodo specifichiamo come devono essere confrontati due oggetti Studente abilitando l'ordinamento in base al nome dello studente.

Questo ci consente di utilizzare il metodo Arrays.sort() direttamente su un array di oggetti Student per ordinarli in un ordine e qui non abbiamo bisogno di un comparatore separato.

Crea quiz