Arrays.sort() in Java
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