Ich bekomme nicht das Konzept von compareTo. Von dem was ich lese, da es eine Schnittstelle ist, müssen wir entscheiden, wie ein Objekt mit einem anderen verglichen wird (Wir definieren, was es bedeutet, dass ein Objekt größer als, gleich und kleiner als ein anderes Objekt ist). Wenn Sie jedoch die compareTo-Methode verwenden, wird eine ganze Zahl zurückgegeben. Wie verbindet sich das? Was machen wir mit dieser Ganzzahl? Wie verbindet sich dies mit der Sortiermethode? Beispielszenario: Sie vergleichen zwei Strings. Sie möchten sie sortieren, so dass die Zeichenfolge mit den meisten Buchstaben zuerst geht. Frage: Wie stellen Sie das auf?Wie funktioniert compareTo? (Comparable Interface) Java 8
Antwort
Kommen wir zum Kern der Sache richtig machen. Stellen Sie sich vor, wir haben eine Klasse K
, die wir als Implementierung Comparable<K>
definiert haben, und zwei Referenzen a
und b
für Objekte der Klasse K
.
Um zu wissen, ob a
ist „weniger als b`, wir
if (a.compareTo(b) < 0) {
// compareTo returned a negative number
,,,
}
Um zu wissen, ob a
ist "gleich" b
wir
if (a.compareTo(b) == 0) {
// compareTo returned zero
...
}
schreiben und wissen, ob a
ist "größer als" b
, schreiben wir
if (a.compareTo(b) > 0) {
// compareTo returned a positive integer
...
}
Macht das etwas klar?
Ja, das klärt die Dinge ein wenig auf, danke. Wie verhält es sich mit der Sortiermethode? Sagen wir, wenn ich eine Liste mit den Objekten a und b sortiere, wenn ich die Liste so sortieren möchte, dass der "größere als" der beiden zuerst kommt, verwende ich dann das dritte Bit des Codes? – kkn
Wenn Sie die Sortierroutine selbst schreiben, dann verwenden Sie dieses dritte Muster, um zu entscheiden, dass "a" vor "b" sortieren soll. –
http://www.javapractices.com/topic/TopicAction.do?Id=10 Dieser Link enthält gute Richtlinien zur Implementierung von compareTo.
Wenn Sie eine Klasse haben, die Sie bestellen müssen, ist compareTo praktisch. Wenn Sie compareTo implementieren, teilen Sie der Sortiermethode im Wesentlichen mit, wie sich verschiedene Instanzen Ihrer Klasse mit miteinander vergleichen.
Angenommen, Sie hätten eine Klasse Student, die eine ganzzahlige Age, eine doppelte GPA und einen String-Namen besitzt, könnten Sie Instanzen von Student wirklich nach einem dieser Felder sortieren. Sie entscheiden jedoch, dass Sie nach dem Alter sortieren möchten. Sie würden dann die compareTo-Funktion implementieren, um eine Rückmeldung basierend auf dem Alter anstelle der anderen beiden Felder zurückzugeben.
Wenn ich Sie wäre, würde ich eine Follow-up-Frage stellen, die sich auf Ihr Beispielszenario konzentriert. Verwenden Sie geeignete Tags und fragen Sie speziell nach der Verwendung und Implementierung einer Sortiermethode und einer compareTo-Methode ... – errrck
Liste sortieren von benutzerdefinierten Objekten in auf- und absteigender Reihenfolge
Java bietet zwei Schnittstellen Objekte zu sortieren, unter Verwendung von Daten aus der Klasse:
Vergleichbare und Vergleicher Schnittstellen
Java Interface Comparable
Java Vergleichbare Schnittstelle wird verwendet, um die Objekte der benutzerdefinierten Klasse zu ordnen. Diese Schnittstelle befindet sich im java.lang-Paket und enthält nur eine Methode namens compareTo (Object). Es gibt nur eine Sortierreihenfolge, d. H. Sie können die Elemente basierend auf nur einem Datenelement sortieren. public int compareTo (Objektobjekt): wird verwendet, um das aktuelle Objekt mit dem angegebenen Objekt zu vergleichen. Wir können die Elemente sortieren: String-Objekte Wrapper Klassenobjekte Benutzerdefinierte Klasse
Java Vergleicher Schnittstelle
Java Komparator-Schnittstelle verwendet Objekte, die Objekte von benutzerdefinierten Klasse zu bestellen. Die Collections-Klasse bietet statische Methoden zum Sortieren der Elemente der Auflistung. Methode der Collections-Klasse zum Sortieren von Listenelementen public void sort (Listenliste, Comparator c): wird verwendet, um die Elemente von List nach dem angegebenen Comparator zu sortieren. Referenzen
: http://corejavapractical.blogspot.in/2017/08/algorithms-in-java.html
package com.mycompany.projectname.corejava;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class AlgorithmsDemo {
public static void main(String[] args) {
//sortingCustomObjectsByComparable();
sortingCustomObjectsByComparator();
}
private static void sortingCustomObjectsByComparable(){
// Sort Projects by project id in ascending order.
List projects = new ArrayList<>();
Project project = new Project();
project.setProjectId(100);
project.setProjectName("project 100");
projects.add(project);
Project project2 = new Project();
project2.setProjectId(200);
project2.setProjectName("project 200");
projects.add(project2);
Project project3 = new Project();
project3.setProjectId(50);
project3.setProjectName("project 50");
projects.add(project3);
Collections.sort(projects);
printList(projects);
}
private static void sortingCustomObjectsByComparator(){
// Sort Projects by project id in ascending order.
List projects = new ArrayList<>();
Project project = new Project();
project.setProjectId(100);
project.setProjectName("project 100");
projects.add(project);
Project project2 = new Project();
project2.setProjectId(200);
project2.setProjectName("project 200");
projects.add(project2);
Project project3 = new Project();
project3.setProjectId(50);
project3.setProjectName("project 50");
projects.add(project3);
// Sorting project by project id in ascending order in Java
Collections.sort(projects);
printList(projects);
// Sorting project by project id in descending order in Java
Collections.sort(projects, Collections.reverseOrder());
printList(projects);
// Sorting project by project name in ascending order in Java
Comparator comparator = new Comparator() {
@Override
public int compare(Project o1, Project o2) {
// TODO Auto-generated method stub
return o1.getProjectName().compareTo(o2.getProjectName());
}
};
Collections.sort(projects, comparator);
printList(projects);
}
private static void printList(List projects){
for(Project project : projects){
System.out.println(project.getProjectId());
System.out.println(project.getProjectName());
}
}
}
class Project implements Comparable{
private int projectId;
private String projectName;
public int getProjectId() {
return projectId;
}
public void setProjectId(int projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
@Override
public int compareTo(Project o) {
// TODO Auto-generated method stub
return this.projectId - o.getProjectId();
}
}
- 1. Warum compareTo() von Comparable Interface beim Überschreiben der compareTo() -Methode verwenden?
- 2. java compareTo Methode Implementierung
- 3. Wie funktioniert compareTo()
- 4. Verwendung der Comparable CompareTo on Strings in Java
- 5. CompareTo in Comparable kann nicht auf Klasse
- 6. Java Generische Vererbung/Generic Comparable
- 7. Java Override CompareTo Methode
- 8. Java 8 Lambda Generika Komparator - Compiler-Warnungen
- 9. Java Generics, Merge, Comparable
- 10. Arraylist aus einer Eingabedatei mit Comparable/Compareto Methoden sortieren
- 11. Wie compareTo() Methode funktioniert ArrayList Sortierung
- 12. compareTo() -Methode in Java funktioniert nicht
- 13. Mit Generics in Comparable
- 14. Implementieren eines CompareTo in Java
- 15. CompareTo inkorrekter Rückgabewert
- 16. Java compareTo (Object obj)
- 17. compareTo Methode Java
- 18. Java compareTo() undefinierter Operator
- 19. Nicht abstrakte Klasse kann die abstrakte Methode compareTo in Comparable nicht überschreiben?
- 20. Java - Collection.Sort über Interface-Objekte
- 21. Gibt es Standard-Java-Klassen mit inkonsistentem compareTo() und equals()?
- 22. Java Einfügen von Namen ~ CompareTo
- 23. Collections.sort auf Liste <Interface> wenn Implementierer Klassen haben ihre eigene compareTo
- 24. Implements Comparable Missing One Merkmal
- 25. Verstehen, wie die Überschreibung mit compareTo in einer Java-Prioritätswarteschlange funktioniert?
- 26. Java 1.5 Kalender # compareTo() Verwirrung
- 27. compareTo Java - Was macht das?
- 28. Wie verwende ich compareTo mit einem Knoten?
- 29. Passing scala `Comparable` Array Java generische Methode
- 30. Wie generiere ich ein compareTo ohne Warnungen?
Haben Sie die [javadoc] (https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html) für "Comparable" gelesen? –
Ich habe es gelesen, und ich habe andere Dokumentation gelesen und andere haben versucht, es mir zu erklären, aber aus irgendeinem Grund kann ich einfach nicht meinen Kopf drumherum ... – kkn
Was ist damit verwirrend Sie am meisten? –