Forse inizio a capire però mi sfugge ancora una cosa.
Cerco di spiegarmi con un esercizio che ho fatto e che richiedeva l'ordinamento al contrario degli elementi interi di un array.
Vi posto sia la mia soluzione, così come l'ho pensata, sia quella del manuale:
SOLUZIONE MIA:
codice:
import java.util.*;
public class Vettore {
public static void main(String args[]) {
int[] vettore = {168,789,167,125,698};
Arrays.sort(vettore);
List<Integer> vettore2 = new ArrayList<Integer>();
for(int i=0; i<vettore.length; i++) {
vettore2.add(vettore[i]);
}
Collections.reverse(vettore2);
System.out.println("Array ordinato al contrario:");
Iterator<Integer> i = vettore2.iterator();
while(i.hasNext()) {
Integer numero = i.next();
System.out.println(numero);
}
}
}
SOLUZIONE MANUALE:
codice:
import java.util.Arrays;
public class TestIntegerComparator {
public static void main(String args[]) {
Integer []array = {1942, 1947, 1971, 1984, 1976, 1974};
Arrays.sort(array, new IntegerComparator());
for (int intero : array) {
System.out.println(intero);
}
}
}
codice:
import java.util.Comparator;
public class IntegerComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return -(o1.compareTo(o2));
}
}
Quello che mi sfugge è il perchè ha utilizzato il metodo sort nella sua seconda forma (quindi quello dove è richiesto l'oggetto della classe che implementa Comparator) quando poteva utilizzare il metodo reverse per invertire l'ordine degli elementi.
Probabilmente l'ha fatto per evitare di dover creare un'altra struttura oltre alla array dichiarato all'inizio e quindi immagino per risparmiare memoria.
In ogni caso vorrei cercare di comprendere meglio la logica di funzionamento di compare. In poche parole, qualsiasi siano gli elementi (ovviamente Integer) confrontati lui restituisce sempre un valore negativo? In teoria questo dovrebbe indicare che l'elemento (o1) sul quale si invoca il metodo è minore dell'elemento (o2) passato in input. Ma a quel punto non capisco il nesso.