Heim > Java > javaLernprogramm > Hauptteil

Detaillierte Beschreibung der Unterschiede zwischen Java Comparator und Comparable

黄舟
Freigeben: 2017-03-14 11:56:00
Original
1781 Leute haben es durchsucht


1. Ähnlichkeiten zwischen Comparator und Comparable

  • 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.


2. Unterschiede zwischen Comparator und Comparable

  • 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;    // 名字不一样, 返回比较名字的结果.
          }
     }
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren
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;    // 名字不一样, 返回比较名字的结果.
          }
     }
}
Nach dem Login kopieren

An diesem Punkt können wir Collections.sort(personList , neu PersonComparator()) zum Sortieren.


3. Zusammenfassung

  • 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-Schnittstelle nicht erneut implementieren, da Generika dies nicht zulassen Das heißt, die HonorPerson-Klasse kann nur die Vergleichsmethode der Person-Klasse verwenden und keine eigene Vergleichsmethode definieren.

public class HonorPerson extends Person{
     private String name;     private int age;     private STring degree;
}
Nach dem Login kopieren

 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage