Aus dem folgenden Code vergleicht ich nicht zwei Dinge bin zu verstehen:CompareTo() und() Methoden des Komparator und vergleichbare
Die
CompareTo()
undCompare()
Methoden gebenint
, aber wie funktioniert das die Sortierung beeinflussen? Die Methode gibtthis.name.compareTo(d.name)
zurück. Was gibt es inthis.name
?
Bitte erläutern Sie ausführlich.
import java.util.*;
class Dog implements Comparator<Dog>, Comparable<Dog>{
private String name;
private int age;
Dog(){
}
Dog(String n, int a){
name = n;
age = a;
}
public String getDogName(){
return name;
}
public int getDogAge(){
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d){
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1){
return d.age - d1.age;
}
}
public class Example{
public static void main(String args[]){
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy",3));
list.add(new Dog("Lacy",2));
list.add(new Dog("Roger",10));
list.add(new Dog("Tommy",4));
list.add(new Dog("Tammy",1));
Collections.sort(list);// Sorts the array list
for(Dog a: list)//printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
System.out.println(" ");
for(Dog a: list)//printing the sorted list of ages
System.out.print(a.getDogName() +" : "+
a.getDogAge() + ", ");
}
}
Was auch immer Sie tun, es ist unsinnig. 'Hund' sollte' Comparator '' nicht _ implementieren; Sie sollten eine separate Klasse (wahrscheinlich anonym) haben, die 'Comparator ' implementiert. In der Zwischenzeit, was erwartest du 'this.name'? Es ist der Name dieses Hundes, verglichen mit einem anderen Hund. –
Für "vergleichen", wenn das Alter des Hundes gleich ist, sind sie gleich. Andernfalls, wenn der erste Hund älter ist, gibt es eine positive Zahl zurück, zweiter Hund, negative Zahl. – Compass
@lois Ich habe keine Entschuldigung – Sri