2016-05-07 8 views
1

私は同等のcompareToメソッドが入力をどのようにソートするかを理解しようとしています。どのようにソートが動作するのか理解しています

@Override 
public int compareTo(Name n) { 
    int lastCmp = lastName.compareTo(n.lastName); 
    return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName)); 
} 

Collections.sortメソッドへの入力配列は次のとおりです:

Name nameArray[] = { 
    new Name("John","Smith"), 
    new Name("Karl","Ng"), 
    new Name("Jeff","Smith"), 
    new Name("Tom","Rich") 
}; 
List<Name> names = Arrays.asList(nameArray); 
Collections.sort(names); 

私はcompareTo方法に取り込まれているものの値を理解していません以下で実装compareTo方法があります。 (n.lastNameとlastname)の順番は?

+0

コレクションのsortメソッドは、compareToメソッドに基づいてNameデータをソートします。 compareToメソッドは、すべてのNameインスタンスがソートされるまで、2つのNameインスタンスで必要な回数だけ呼び出されます。あなたの4つのインスタンスの例では、compareToメソッドは6回も呼び出すことができます。 –

答えて

1

Collections.sort()メソッドは、コレクションの長さや種類に応じてソートする異なるアルゴリズムを使用しています(と思う...)

オブジェクトが小さい場合compareToメソッドは、ネガ、0、または陽性を返す必要があります - より大きい、等しい、より大きい。 lastName変数は、firstName:StringおよびlastName:Stringで構成されるNameクラスのLast Nameを参照します。

このメソッドは、lastName(String型のオブジェクト)と、渡されたオブジェクト "n"(Name型)のlastNameを比較します。 0以外の場合(同じでないことを意味する)、その値を返します。それが等しい場合は、最初の名前を比較し、それを返します。

したがって、2つの文字列(NameオブジェクトのfirstNameとlastName)のみを比較しています。

+0

パブリック静的コンパレータ StuRollno =新しいコンパレータ(){ \t \t公共INT比較(Student2 S1、S2 Student2){ \t \t \t INT rollno1 = s1.getRollno()。 \t \t \t int rollno2 = s2.getRollno(); \t \t \t \t \t \t //昇順の場合 \t \t \t戻りrollno1-rollno2。 \t \t \t}};このコードでは、どうすればrollno1-rollno2;コレクションアルゴリズムが異なるため、s1とs2が何になるのかわからないので、昇順または降順でソートしますか? – user2892493

+0

@ user2892493:o1 - o2が昇順で、o2 - o1が降順で、o1とo2がintであると仮定します。 Javaのソート方法を書いた人はかなりスマートで、コードを書いたときに心配していました。ここに実験があります。 compareToメソッドを使用せずに独自のソートメソッド**を作成するか、それと等価です**。実験を完了したらお知らせください。 –

+0

ギルバート:もし私がw @ urが言っているのか分からない。どのようにcompareToメソッドを使用せずに文字列のソートメソッドを記述する? – user2892493

関連する問題