Verificare se un array è ordinato in Java

1. Panoramica

In questo tutorial, vedremo diversi modi per verificare se un array è ordinato.

Prima di iniziare, però, sarebbe interessante controllare come ordinare gli array in Java.

2. Con un ciclo

Un modo per controllare è con un ciclo for . Possiamo iterare tutti i valori dell'array uno per uno.

Vediamo come farlo.

2.1. Primitive Array

In poche parole, itereremo su tutte le posizioni tranne l'ultima. Questo perché confronteremo una posizione con quella successiva.

Se alcuni di essi non vengono ordinati, il metodo restituirà false. Se nessuno dei confronti restituisce false, significa che un array è ordinato:

boolean isSorted(int[] array) { for (int i = 0; i  array[i + 1]) return false; } return true; }

2.2. Oggetti che implementano confrontabili

Possiamo fare qualcosa di simile con oggetti che implementano Comparable. Invece di usare un segno di maggiore di, useremo compareTo :

boolean isSorted(Comparable[] array) { for (int i = 0; i  0) return false; } return true; }

2.3. Oggetti che non implementano confrontabili

Ma cosa succede se i nostri oggetti non implementano Comparable ? In questo caso, possiamo invece creare un Comparatore.

In questo esempio, useremo l' oggetto Employee . È un semplice POJO con tre campi:

public class Employee implements Serializable { private int id; private String name; private int age; // getters and setters }

Quindi, dobbiamo scegliere in quale campo vogliamo ordinare. Qui, ordiniamo in base al campo dell'età :

Comparator byAge = Comparator.comparingInt(Employee::getAge);

E poi, possiamo cambiare il nostro metodo per prendere anche un comparatore :

boolean isSorted(Object[] array, Comparator comparator) { for (int i = 0; i  0) return false; } return true; }

3. Ricorsivamente

Possiamo, ovviamente, usare invece la ricorsione. L'idea qui è che controlleremo due posizioni nell'array e poi ricorreremo a una ripetizione finché non avremo controllato ogni posizione.

3.1. Primitive Array

In questo metodo, controlliamo le ultime due posizioni. Se sono ordinati, chiameremo di nuovo il metodo ma con una posizione precedente. Se una di queste posizioni non è ordinata, il metodo restituirà false:

boolean isSorted(int[] array, int length)  length  array[length - 1]) return false; return isSorted(array, length - 1); 

3.2. Oggetti che implementano confrontabili

Ora, guardiamo di nuovo come oggetti che implementano Comparable. Vedremo che lo stesso approccio con compareTo funzionerà:

boolean isSorted(Comparable[] array, int length) 

3.3. Oggetti che non implementano confrontabili

Ultimamente, proviamo di nuovo il nostro oggetto Employee , aggiungendo il parametro Comparator :

boolean isSorted(Object[] array, Comparator comparator, int length)  if (array == null 

4. Conclusione

In questo tutorial, abbiamo visto come verificare se un array è ordinato o meno. Abbiamo visto soluzioni sia iterative che ricorsive.

La nostra raccomandazione è di utilizzare la soluzione loop. È più pulito e più facile da leggere.

Come al solito, il codice sorgente di questo tutorial può essere trovato su GitHub.