Der Unterschied zwischen vergleichbar und Komparator in Java
Nov 27, 2019 pm 01:20 PMComparable Comparator
Comparable befindet sich im java.lang-Paket. Es handelt sich im Wesentlichen um einen internen Comparator, der Comparable selbst implementiert Das Vergleichsergebnis h?ngt von der Implementierung der natürlichen Vergleichsmethode ?compareTo“ ab.
Die Rückgabewerte von CompareTo sind -1, 0, 1. Wenn der Komparator gr??er als das verglichene Objekt ist, wird 1 zurückgegeben, 0 wird zurückgegeben, wenn er gleich ist, und -1 wird zurückgegeben, wenn er kleiner als das verglichene Objekt ist.
Collections.sort
und Arrays.sort
k?nnen automatisch Objekte sortieren, die Comparable implementieren.
Kostenlose Online-Lernvideoempfehlung: Java-Lernen
Das Beispiel sieht wie folgt aus: Wir erstellen ein Knotenobjekt und überprüfen die Verwendung von Comparable durch Vergleich zwischen Knotenobjekten.
Die Implementierung des Node-Objekts ist wie folgt:
public class Node implements Comparable<Object>{ private int num; private String name; @Override public String toString() { return "num=" + num + " name=" + name; } public Node(int num, String name) { super(); this.num = num; this.name = name; } public Node() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Object o) { Node node = (Node)o; return this.num - node.getNum(); } }
Wie Sie sehen k?nnen, haben wir die Comparable-Schnittstelle für Node implementiert und die CompareTo-Methode überschrieben.
Um es zun?chst zu testen, erstellen wir 10 Knotenobjekte, fügen sie der Liste hinzu und ?ndern dann die Reihenfolge.
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打亂順序 Collections.shuffle(list); for (Node node : list) { System.out.println(node); } } }
Das Ergebnis wird wie folgt angezeigt:
num=7 name=node num=0 name=node num=5 name=node num=9 name=node num=6 name=node num=3 name=node num=4 name=node num=8 name=node num=1 name=node num=2 name=node
Jetzt ist die Ausgabe nicht in Ordnung, als n?chstes verwenden wir Collections.sort, um sie zu sortieren.
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打亂順序 Collections.shuffle(list); Collections.sort(list); for (Node node : list) { System.out.println(node); } } }
Collections.sort vergleicht tats?chlich gem?? der Definition in der CompareTo-Methode. Wir haben zuvor die Sortierung in aufsteigender Reihenfolge der Anzahl definiert. Jetzt sind die Sortierergebnisse wie folgt:
num=0 name=node num=1 name=node num=2 name=node num=3 name=node num=4 name=node num=5 name=node num=6 name=node num=7 name=node num=8 name=node num=9 name=node
Comparator
Comparator
befindet sich im Paket java.util
und ist im Wesentlichen ein externer Komparator. Wenn eine Klasse Comparable nicht intern implementiert oder Comparable implementiert, die Vergleichsmethode jedoch nicht Ihren Wünschen entspricht, k?nnen wir die Implementierung von Comparator in Betracht ziehen. In der Comparator-Schnittstelle gibt es eine Vergleichsmethode, deren Verwendung mit der von CompareTo in Comparable identisch ist.
Wir müssen einen Komparator an die Sortiermethode übergeben, um die Sortierreihenfolge zu steuern. Wir k?nnen die Verwendung mehrerer Sortiermethoden überprüfen und feststellen, dass sie einen Comparator-Parameter übergeben k?nnen.
Collections.sort(List<T> list, Comparator<? super T> c); Arrays.sort(T[] a, Comparator<? super T> c);
?ndern Sie unser vorheriges Node-Objekt und implementieren Sie Comparable nicht mehr.
public class Node{ private int num; private String name; @Override public String toString() { return "num=" + num + " name=" + name; } public Node(int num, String name) { super(); this.num = num; this.name = name; } public Node() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Wir versuchen, in absteigender Reihenfolge zu sortieren, indem wir einen Komparator übergeben.
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打亂順序 Collections.shuffle(list); Collections.sort(list, new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o2.getNum()-o1.getNum(); } }); for (Node node : list) { System.out.println(node); } } }
Die Ergebnisse sind wie folgt:
num=9 name=node num=8 name=node num=7 name=node num=6 name=node num=5 name=node num=4 name=node num=3 name=node num=2 name=node num=1 name=node num=0 name=node
Comparator implementiert den Vergleich in umgekehrter Reihenfolge.
Zusammenfassung
Comparable ist ein interner Komparator und Comparator ist ein externer Komparator. Wenn die Klasse die Comparable-Schnittstelle nicht implementiert, aber sortiert werden muss, k?nnen wir darüber nachdenken mit Komparator. Aus einer anderen Perspektive ist die Kopplung bei der Verwendung der Comparable-Schnittstelle gr??er als die von Comparator, denn wenn wir den Vergleichsalgorithmus ?ndern müssen, müssen wir auch die Implementierungsklasse von Comparable ?ndern.
Dieser Artikel stammt aus der Kolumne Java Quick Start Jeder ist willkommen, gemeinsam zu diskutieren und zu lernen!
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen vergleichbar und Komparator in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

In der Welt des Handels mit digitaler W?hrung ist das Verst?ndnis und die F?higkeiten bei der Verwendung verschiedener Auftragstypen der Schlüssel zu erfolgreichen Transaktionen. Es ist so einfach wie das Fahren eines Fahrzeugs erfordert das Beherrschen des Beschleunigers und der Bremsen. Marktbestellungen und eingeschr?nkte Bestellungen sind die beiden grundlegendsten und leistungsst?rksten Tools, die alle H?ndler beherrschen müssen. Egal, ob Sie auf Mainstream -Handelsplattformen wie Binance Binance, Ouyi Okx, Huobi oder Gate.io Sesam Open Door arbeiten, alle bilden den Kern Ihrer Handelsstrategie.

Der Kernunterschied zwischen USDC, DAI und TUSD liegt im Ausstellungsmechanismus, im Kollateralverm?gen und im Risikomerkmal. 1. USDC ist ein zentraler Stablecoin, der von Circle herausgegeben wird und durch Bargeld und kurzfristige Staatsanleihen besichert ist. Die Vorteile sind Einhaltung und transparente, starke Liquidit?t und hohe Stabilit?t, aber es besteht das Risiko einer zentralisierten überprüfung und eines Einzelpunktversagens. 2. Dai ist ein dezentrales Stablecoin, das durch das Makerdao -Protokoll erzeugt wird, und das Kollateral ist ein Krypto -Verm?genswert. Es hat die Vorteile von Anti-Censuring, Transparenz in der Kette und freie freie, aber es ist auch systemische Risiken, Abh?ngigkeiten von zentralisierten Verm?genswerten und Komplexit?tsproblemen ausgesetzt. 3.. TUSD ist ein zentraler Stablecoin, der in Echtzeit-Reserve-Proofs in Echtzeit betont und eine h?here Transparenzüberprüfung mit h?herer Frequenz liefert, jedoch einen geringen Marktanteil und eine schwache Liquidit?t aufweist. Die drei sind Kollateralypen und Dezentralisierung

Optional kann eindeutig Absichten ausdrücken und das Code -Rauschen für Nullurteile reduzieren. 1. optional.ofnullable ist eine h?ufige M?glichkeit, mit Null -Objekten umzugehen. Wenn beispielsweise Werte von Karten entnommen werden, kann Orelse verwendet werden, um Standardwerte bereitzustellen, damit die Logik klarer und pr?zise ist. 2. Verwenden Sie Kettenaufrufkarten, um verschachtelte Werte zu erreichen, um NPE sicher zu vermeiden, und enden Sie automatisch, wenn eine Verbindung NULL ist, und senden Sie den Standardwert zurück. 3. Filter kann zur bedingten Filterung verwendet werden, und nachfolgende Operationen werden weiterhin nur dann durchgeführt, wenn die Bedingungen erfüllt sind. Andernfalls wird er direkt zu Orelse springen, was für das leichte Gesch?ftsverurteilungsurteil geeignet ist. 4. Es wird nicht empfohlen, optional zu überbeanspruchen, z. B. Grundtypen oder einfache Logik, die die Komplexit?t erh?hen, und einige Szenarien kehren direkt zur NU zurück.

Die Kernprobleme für die Begegnung mit Java.io.iSserializableException besteht darin, sicherzustellen, dass alle Klassen, die serialisiert werden müssen, die serialisierbare Schnittstelle implementieren und die Serialisierungsunterstützung verschachtelter Objekte überprüfen. 1. Hinzufügen von Ger?ten zur Hauptklasse; 2. Stellen Sie sicher, dass die entsprechenden Klassen von benutzerdefinierten Feldern in der Klasse auch serialisierbar implementieren; 3.. Verwenden Sie vorübergehend Felder, die nicht serialisiert werden müssen. 4. überprüfen Sie die nichtserialisierten Typen in Sammlungen oder verschachtelten Objekten. 5. überprüfen Sie, welche Klasse die Schnittstelle nicht implementiert. 6. Berücksichtigen Sie das Ersatzdesign für Klassen, die nicht ge?ndert werden k?nnen, z. B. Schlüsseldaten oder Verwendung serialisierbarer Zwischenstrukturen; 7. überlegen Sie sich

Es gibt drei g?ngige Methoden, um die Karte in Java zu durchqueren: 1. Verwenden Sie ein Eintragssatz, um gleichzeitig Schlüssel und Werte zu erhalten, was für die meisten Szenarien geeignet ist. 2. Verwenden Sie Schlüsselet oder Werte, um Schlüssel oder Werte zu durchqueren. 3. Verwenden Sie Java8s Foreach, um die Codestruktur zu vereinfachen. Der Eintragssatz gibt einen Satz ein, der alle Schlüsselwertpaare enth?lt, und jede Schleife wird das MAP.Entry-Objekt abgew?hlt, das für h?ufige Zugriff auf Tasten und Werte geeignet ist. Wenn nur Schlüsseln oder Werte erforderlich sind, k?nnen Sie Schlüsselset () bzw. values () aufrufen, oder Sie k?nnen den Wert über MAP.get (Schlüssel) beim Durchqueren der Tasten erhalten. Java 8 kann nach ((Schlüssel, Wert)-& gt verwenden

In Java wird vergleichbar verwendet, um die Standardsortierregeln intern zu definieren, und der Komparator wird verwendet, um die logische Sortierlogik extern zu definieren. 1. Vergleichbar ist eine Schnittstelle, die von der Klasse selbst implementiert wird. Es definiert die natürliche Ordnung, indem die Vergleichsmethode umgeschrieben wird. Es ist für Klassen mit festen und am h?ufigsten verwendeten Sortiermethoden wie String oder Ganzzahl geeignet. 2. Comparator ist eine extern definierte funktionale Schnittstelle, die über die Vergleich () -Methode implementiert wird und für Situationen geeignet ist, in denen mehrere Sortierungsmethoden für dieselbe Klasse erforderlich sind, der Klassenquellcode nicht ge?ndert werden kann oder die Sortierlogik h?ufig ge?ndert wird. Der Unterschied zwischen den beiden besteht darin, dass vergleichbar nur eine Sortierlogik definieren und die Klasse selbst ?ndern muss, w?hrend der Vergleich

Es gibt drei allgemeine M?glichkeiten, JSON in Java zu analysieren: Verwenden Sie Jackson, GSON oder Org.json. 1. Jackson eignet sich für die meisten Projekte mit guten Leistung und umfassenden Funktionen und unterstützt die Konversions- und Annotationszuordnung zwischen Objekten und JSON -Zeichenfolgen. 2. GSON ist besser für Android-Projekte oder leichte Bedürfnisse geeignet und einfach zu bedienen, aber bei den Umgang mit komplexen Strukturen und Hochleistungsszenarien leicht unterlegen. 3.org.json ist für einfache Aufgaben oder kleine Skripte geeignet und wird aufgrund der mangelnden Flexibilit?t und der Art von Sicherheit für gro?e Projekte nicht empfohlen. Die Wahl sollte aufgrund der tats?chlichen Bedürfnisse entschieden werden.

So erstellen Sie schnell neue E -Mails in Outlook wie folgt: 1. Die Desktop -Version verwendet die T -Shortcut -Taste Strg Shift M, um ein neues E -Mail -Fenster direkt zu erzielen. 2. Die Webversion kann neue E-Mails in One-Klick erstellen, indem ein Lesezeichen mit JavaScript (z. B. JavaScript: document.querySelector ("Divrole = 'Button'") erstellt. Click ()); 3.. Verwenden Sie Browser-Plug-Ins (z. B. Vimium, CrxMouseGerger), um die Schaltfl?che "Neue Mail" auszul?sen. 4. Windows-Benutzer k?nnen auch "neue Mails" ausw?hlen, indem Sie mit der rechten Maustaste auf das Outlook-Symbol der Taskleiste klicken
