3

オブジェクトが持っている文字列でオブジェクトを並べ替えたい。これは理にかなっていますか?今までは使用Arrays.sort(BlahList);しただけでしたが、文字列の配列リストだけでなく、多くのオブジェクトを使用できるようになりました。

public class Contact implements Comparable
{
    private string name;

    public compareTo (Contact Contact1)
    {
        return this.name.compareTo(Contact1.name);
    }
}

そして私が持っている主な方法で:

Collections.sort(ContactList);

名前が年齢の場合、これが整数に対して機能するかどうかも知りたいですか?

4

4 に答える 4

2

まず、インターフェイスを入力する必要があります。Comparable

public class Contact implements Comparable<Contact>

次に、パラメーター/変数の先頭に小文字を使用する必要があります。

public compareTo (Contact contact)

第三に、this.必要でない限り使用しないことをお勧めします - それは単なるコードの混乱です:

return name.compareTo(contact.name);

最後に、はい、次のように年齢を比較できます。

return age - contact.age; // order youngest to oldest

または、よりクリーンな方法(これを指摘してくれてありがとうJB):

return Integer.compareTo(age, contact.age);

このクラス全体は次のようになります。

public class Contact implements Comparable<Contact> {
    private string name;

    public int compareTo(Contact contact) {
        return name.compareTo(contact.name);
    }
}

注:メソッドintのコードに戻り値の型がありませんでした。compareTo()

代わりに年齢を比較するには、compareTo()メソッドを次のように置き換えます。

public int compareTo(Contact contact) {
    return Integer.compareTo(age, contact.age);
}
于 2013-05-13T14:26:14.363 に答える
0

Java 7 では、Integer.compare(age, contact.age) を使用できます。(x < y) と (ほぼ) 同じですか? -1 : ((x == y) ? 0 : 1); しかし、はるかに読みやすい (Integer.compare は、正確な数値を返すとは言っていませんが、Oracle の実装では、1 の代わりに他の正数を返し、-1 の代わりに負数を返す可能性があります)。

ところで。Integer.MIN_VALUE-Integer.MAX_VALUE = 1 であるため、age-contact.age を使用しないでください。

複雑なコンパレータ (名前が等しい場合は最初に名前で、次に年齢で) の場合、Google guava などのライブラリを使用することをお勧めします。

于 2013-05-13T14:47:50.380 に答える
0

それはすべてのために働く。int の場合、compareTo メソッドに次のコードを記述する必要があります

return this.age-contact1.age// for ascending order contact1.age-this.age // for descending order

于 2013-05-13T14:27:08.670 に答える