CodeGym /Corsi /JAVA 25 SELF /Classe Arrays: sort, fill, copyOf, equals

Classe Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
Livello 7 , Lezione 5
Disponibile

1. Introduzione

Gli array in Java sono uno strumento potente, ma la sintassi di base presto si scontra con la routine. In aiuto arriva la classe java.util.Arrays — un insieme di metodi statici per lavorare con gli array: ordinamento, copia, confronto, stampa formattata e altro ancora. Non serve creare istanze — tutti i metodi sono statici e si invocano tramite il nome della classe.

Per usare i metodi, aggiungi l’import all’inizio del file:

import java.util.Arrays;

Se dimentichi l’import, il compilatore segnalerà che Arrays «non trovato» — non è un bug, ma il comportamento previsto senza import.

2. Ordinamento di un array: Arrays.sort

Come funziona Arrays.sort

Sintassi


Arrays.sort(massiv);
Arrays.sort(massiv, nachal’nyyIndeks, konechnyyIndeks);
Ordinamento dell’intero array o di un sottointervallo

Il metodo ordina «in place» — modifica l’array originale e non ne restituisce uno nuovo. Vuoi mantenere l’ordine originale? Copia prima l’array.

Esempio: ordinamento di un array di interi

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Ordiniamo in ordine crescente

System.out.println("Array ordinato: " + Arrays.toString(scores));
// Stamperà: [1, 2, 5, 7, 9]

Esempio: ordinamento di un array di stringhe

String[] names = {"Vasya", "Petya", "Anya", "Igor’"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Anya, Igor’, Petya, Vasya]

Importante: le stringhe vengono ordinate lessicograficamente (in ordine alfabetico), i numeri in ordine crescente.

Ordinare una parte dell’array

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // ordina gli elementi dagli indici 1 a 3 inclusi (4 escluso)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

Caratteristiche

  • Ordinamento «in place»: l’array originale viene modificato.
  • Numeri — in ordine crescente; stringhe — in ordine alfabetico.
  • Per oggetti complessi usa le versioni sovraccariche con un Comparator.

3. Riempimento di un array: Arrays.fill

Sintassi


Arrays.fill(massiv, znachenie);
Arrays.fill(massiv, nachal’nyyIndeks, konechnyyIndeks, znachenie);
Riempimento dell’intero array o di un intervallo con un unico valore

Il metodo riempie tutti gli elementi o la parte indicata dell’array con lo stesso valore.

int[] marks = new int[5];
Arrays.fill(marks, 3); // Tutti gli elementi ora valgono 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

Riempimento di una parte dell’array

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Riempirà gli elementi dagli indici 2 a 4 inclusi (5 escluso)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

Riempimento di un array di stringhe

String[] guests = new String[4];
Arrays.fill(guests, "Vuoto");
System.out.println(Arrays.toString(guests)); // [Vuoto, Vuoto, Vuoto, Vuoto]

4. Copia di un array: Arrays.copyOf e Arrays.copyOfRange

Arrays.copyOf

Sintassi


Arrays.copyOf(iskhodnyyMassiv, novayaDlina);
Creazione di una nuova copia con la lunghezza indicata

Crea un nuovo array e copia gli elementi da quello originale. Se la nuova lunghezza è maggiore di quella originale, la «coda» viene riempita con i valori predefiniti (0 per int, null per i riferimenti).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

Riduzione dell’array

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

Sintassi


Arrays.copyOfRange(iskhodnyyMassiv, nachal’nyyIndeks, konechnyyIndeks);
Copia di un sottoarray in un nuovo array
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Copierà gli elementi dagli indici 1 a 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. Confronto di array: Arrays.equals e Arrays.deepEquals

In Java non si possono confrontare gli array con == — così si confrontano i riferimenti, non il contenuto:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

Come confrontare il contenuto?


Arrays.equals(massiv1, massiv2);
Arrays.deepEquals(matritsa1, matritsa2);
Confronto superficiale e profondo
System.out.println(Arrays.equals(a, b)); // true

Per gli array monodimensionali usa Arrays.equals, per quelli bidimensionali e più profondi — Arrays.deepEquals.

Esempio: confronto di array bidimensionali

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. Stampa leggibile di un array: Arrays.toString e Arrays.deepToString

La stampa diretta di un array produce una stringa illeggibile:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

Sintassi


Arrays.toString(massiv);
Arrays.deepToString(matritsa);
Stampa formattata di array monodimensionali e multidimensionali
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Errori tipici nell’uso della classe Arrays

Errore n. 1: tentare di confrontare array con ==
Gli array sono oggetti, e == confronta solo i riferimenti. Anche con gli stessi valori il risultato sarà false. Usa Arrays.equals (per i monodimensionali) o Arrays.deepEquals (per i multidimensionali).

Errore n. 2: dimenticare che l’ordinamento modifica l’array «in place»
Se serve l’ordine originale, crea prima una copia con Arrays.copyOf, poi ordina la copia. Altrimenti l’originale perderà il suo ordine.

Errore n. 3: interpretazione errata dei limiti in Arrays.fill e Arrays.copyOfRange
I metodi usano un intervallo semiaperto: l’indice destro è escluso. Per esempio, Arrays.fill(arr, 2, 5, 9) riempirà gli indici 2, 3, 4, mentre l’elemento con indice 5 non verrà toccato.

Errore n. 4: tentare di stampare un array direttamente
La chiamata System.out.println(arr) stampa una rappresentazione tecnica. Usa Arrays.toString per i monodimensionali e Arrays.deepToString per i multidimensionali.

Errore n. 5: confrontare array multidimensionali con Arrays.equals
Il metodo confronta solo il livello superiore (i riferimenti agli array interni). Per confrontare il contenuto usa Arrays.deepEquals.

1
Sondaggio/quiz
Array, livello 7, lezione 5
Non disponibile
Array
Introduzione agli array
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION