Sobes.tech
Junior — Middle

Qual è la differenza tra le interfacce Comparator e Comparable in Java?

sobes.tech AI

Risposta dell'AI

In Java, le interfacce Comparable e Comparator sono usate per confrontare oggetti, ma hanno scopi diversi:

  • Comparable — definisce l'ordine naturale degli oggetti. La classe implementa questa interfaccia affinché gli oggetti possano essere confrontati tra loro tramite il metodo compareTo(). Viene solitamente usata per l'ordinamento di default.

  • Comparator — è un oggetto separato che stabilisce un modo alternativo di confrontare due oggetti. È usato quando si desidera ordinare gli oggetti secondo criteri diversi o quando la classe non implementa Comparable.

Esempio:

class Person implements Comparable<Person> {
    String name;
    int age;

    public int compareTo(Person other) {
        return this.name.compareTo(other.name); // ordine naturale per nome
    }
}

// Comparator per ordinare per età
Comparator<Person> ageComparator = new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
};

In questo modo, Comparable definisce un metodo di confronto interno alla classe, mentre Comparator permette di creare molteplici metodi di confronto esterni.