の()メソッドを比較し、私は二つのことを理解していないです:のCompareTo()と下記のコードからコンパレータと同等の
は
CompareTo()
とCompare()
方法はint
を返しますが、どのようにこれはソートに影響しますか?このメソッドは
this.name.compareTo(d.name)
を返します。this.name
には何がありますか?
丁寧に説明してください。あなたはおそらく推測したよう
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() + ", ");
}
}
何をしていても、無意味です。 'Dog'は' Comparator 'を実装するべきではありません。 'Comparator 'を実装する別のクラス(おそらく匿名)が必要です。その間、あなたは 'this.name'が何になると思いますか?この犬の名前は、別の犬と比較されています。 –
「比較」の場合、犬の年齢が同じ場合は同じです。それ以外の場合は、最初の犬が古い場合は、正の数、2番目の犬、負の数を返します。 – Compass
@louis私は残念です。 – Sri