EDIT: Prima di tutto, un paio di cose:
- L'annotazione
@Override
non dovrebbe essere obbligatoria. Se Eclipse vuole che tu lo metta, non ti preoccupare.
- Non scrivere la propria interfaccia comparatore. Elimina quella definizione NAO e usa quella fornita da Java. Reinventare la ruota probabilmente viola il Codice di programmazione informatico in circa 15 modi diversi. Utilizzare
import java.util.Comparator;
nella parte superiore del codice (prima del materiale public class
) a) utilizzare la versione fornita da Java e b) rendere il codice compatibile con praticamente tutto il resto del mondo.
L'interfaccia comparatore non viene utilizzato per creare una classe che si può mettere in ordine. Questa è l'interfaccia comparabile.
Entrambi sono simili, quindi descriverò entrambi.
java.util.Comparator
L'interfaccia Comparator, come già sapete, ha un metodo: compare
. Il comparatore è generico (usa le parentesi angolari <>
) e prende il tipo che confronterà all'interno dello <>
. Il fatto è che i Comparatori sono usati per confrontare gli articoli di altre classi. Ad esempio, potrei creare un Comparatore per java.lang.Integers
che restituisce l'opposto dell '"ordine naturale" (come di solito vengono ordinati gli interi).
I comparatori vengono utilizzati principalmente per assegnare ad altri oggetti un modo per ordinare i loro parametri quando non sono in ordine naturale. Ad esempio, lo java.util.TreeSet
class utilizza un comparatore per la sua capacità di ordinamento.
java.lang.Comparable
scopo paragonabile è quello di dire che un oggetto può essere paragonata. È anche generico e prende il tipo a cui può essere paragonato. Ad esempio, un Comparable<String>
può essere paragonato a Stringhe.
Comparable ha un metodo: compareTo()
. A differenza di Comparator compare()
, compareTo
accetta un parametro. Funziona come compare
, tranne che utilizza l'oggetto di richiamo come un parametro. Quindi, comparableA.compareTo(comparableB)
corrisponde a comparator.compare(comparableA, comparableB)
.
Paragonabile per lo più stabilisce l'ordine naturale per gli oggetti ed è il modo predefinito per confrontare gli oggetti. Il ruolo del comparatore è quello di ignorare questo ordine naturale quando si hanno esigenze diverse per il confronto o l'ordinamento dei dati.
ArrayList Ordinamento
Per ordinare un List
, è possibile utilizzare il metodo già disponibili: scorrere verso il basso per sort
sul java.util.Collections
class. Un metodo prende un comparatore, l'altro no. sort
è statico; utilizzare Collections.sort(...)
, non Collections c = new Collections(); c.sort(...)
. (Collections
non ha nemmeno un costruttore comunque, quindi meh.)
Attendi, la tua classe 'Item' implementa' Comparator', che per la sua definizione richiede un 'Item' generico per funzionare. Sembra che tu non abbia bisogno di un'interfaccia generica qui ... – Kroltan
Cosa intendi per interfaccia generica? – bassandguitar
Non so come spiegare ... https://www.google.com/search?btnG=1&pws=0&q=generics+in+java – Kroltan