Comparable und Comparator werden beide zum Vergleichen und Sortieren von Elementen in einer Sammlung verwendet;
Comparable und Comparator sind beide Java interface, Comparable befindet sich unter dem Paket java.lang und Comparator befindet sich unter dem Paket java.util
Benutzerdefinierte Klasse implementiert eine der beiden, um die Größen zu vergleichen.
Comparable wird im Allgemeinen innerhalb der Klasse definiert, während Comparator im Allgemeinen außerhalb der Klasse definiert wird ;
Um die Comparable-Schnittstelle zu implementieren, müssen Sie ihre CompareTo-Methode neu schreiben, und um die Comparator-Schnittstelle zu implementieren, müssen Sie sie neu schreiben seine Compare -Methode
implementiert die Comparable-Schnittstelle:
public class Person implements Comparable<Person> { private String name; private int age; @Override public int compareTo(Person another) { int i = 0; i = name.compareTo(another.name); // 使用String的compareTo方法 if(i == 0) { // 如果名字一样,比较年龄, 返回比较年龄结果 return age - another.age; } else { return i; // 名字不一样, 返回比较名字的结果. } } }
Hierfür können wir Collections.sort( personList ) zum Sortieren verwenden.
Implementieren Sie die Comparator-Schnittstelle:
public class Person{ private String name; private int age }
public class PersonComparator implements Comparator<Person> { public int compare(Person one, Person another) { int i = 0; i = one.name.compareTo(another.name); // 使用String的compareTo方法 if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果 return one.age - another.age; } else { return i; // 名字不一样, 返回比较名字的结果. } } }
An diesem Punkt können wir Collections.sort(personList , neu PersonComparator()) zum Sortieren.
Die Verwendung von Comparable ist relativ einfach, solange das Objekt das implementiert Die vergleichbare Schnittstelle wird direkt zu einem vergleichbaren Objekt, aber muss den Quellcode ändern, was zu einer hohen Codekopplung führt, die die Skalierbarkeit des Codes ernsthaft beeinträchtigt ; >
Der Vorteil der Verwendung von Comparator besteht darin, dass den Quellcode nicht ändern muss und der Code auch nicht geändert werden muss stark gekoppelt , aber wenn ein benutzerdefiniertes Objekt verglichen werden muss, können der Komparator und das Objekt zusammen übergeben werden, um die Größe zu vergleichen; 🎜> Aus Sicht der Code-Skalierbarkeit wäre es also besser, die Comparator-Schnittstelle zu implementieren, um die Elemente im Container zu sortieren.
Sehen Sie sich das folgende Beispiel an: Hier kann die HonorPerson-Klasse die Comparable
public class HonorPerson extends Person{ private String name; private int age; private STring degree; }
Hier haben HonorPerson und Person jeweils ihre eigenen Vergleichsmethoden und beeinflussen sich nicht gegenseitig oder stehen in Konflikt miteinander.
Das obige ist der detaillierte Inhalt vonDetaillierte Beschreibung der Unterschiede zwischen Java Comparator und Comparable. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!