Java - Come usare il comparatore?
Sia TreeSet che TreeMap memorizzano gli elementi in ordine ordinato. Tuttavia, è il comparatore che definisce esattamente il significato di ordinamento .
L'interfaccia di Comparator definisce due metodi: compare () ed equals (). Il metodo compare (), mostrato qui, confronta due elementi per ordine:
Il metodo di confronto
int compare(Object obj1, Object obj2)
obj1 e obj2 sono gli oggetti da confrontare. Questo metodo restituisce zero se gli oggetti sono uguali. Restituisce un valore positivo se obj1 è maggiore di obj2. In caso contrario, viene restituito un valore negativo.
Sovrascrivendo compare (), è possibile modificare il modo in cui gli oggetti sono ordinati. Ad esempio, per ordinare in ordine inverso, puoi creare un comparatore che inverte il risultato di un confronto.
Il metodo uguale
Il metodo equals (), mostrato qui, verifica se un oggetto è uguale al comparatore di invocazione -
boolean equals(Object obj)
obj è l'oggetto da verificare per l'uguaglianza. Il metodo restituisce true se obj e l'oggetto invocante sono entrambi oggetti Comparator e utilizzano lo stesso ordine. In caso contrario, restituisce false.
L'override di equals () non è necessario e la maggior parte dei semplici comparatori non lo farà.
Esempio
import java.util.*;
class Dog implements Comparator<Dog>, Comparable<Dog> {
private String name;
private int age;
Dog() {
}
Dog(String n, int a) {
name = n;
age = a;
}
public String getDogName() {
return name;
}
public int getDogAge() {
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d) {
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1) {
return d.age - d1.age;
}
}
public class Example {
public static void main(String args[]) {
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy", 3));
list.add(new Dog("Lacy", 2));
list.add(new Dog("Roger", 10));
list.add(new Dog("Tommy", 4));
list.add(new Dog("Tammy", 1));
Collections.sort(list); // Sorts the array list
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
System.out.println(" ");
for(Dog a: list) // printing the sorted list of ages
System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", ");
}
}
Questo produrrà il seguente risultato:
Produzione
Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10,
Note - L'ordinamento della classe Arrays è uguale a quello delle collezioni.