3

次の簡単なテストを試しました。

class ZiggyTest{
    public static void main(String[] args){

        List<Cities> cities3 = new ArrayList<Cities>();
        Cities city = new Cities("London");

        cities3.add(new Cities("Manchester"));
        cities3.add(new Cities("Glasgow"));
        cities3.add(new Cities("Leeds"));
        cities3.add(city);
        cities3.add(new Cities("Leicester"));
        cities3.add(new Cities("Croydon"));
        cities3.add(new Cities("Watford"));

        System.out.println("IndexOf(new Croydon) " 
                       + cities3.indexOf(new Cities("Croydon")));
        System.out.println("IndexOf(city) " 
                       + cities3.indexOf(city));
    }   
}

class Cities implements Comparable<Cities>{
    String title;

    Cities(String aTitle){
        this.title = aTitle;
    }

    public String getTitle(){
        return title;
    }

    public String toString(){
        return "Title : " + title;
    }

    public int compareTo(Cities c){
        return title.compareTo(c.getTitle());
    }
}

上記のテストの出力は次のとおりです。

IndexOf(new Croydon) -1
IndexOf(city) 3

2行目が3を生成している理由はわかりますが、1行目がtitle="Croydon"の新しい行を見つけられない理由はわかりません。

APIは、indexOfメソッドを次のように記述します

このリストで指定された要素が最初に出現するインデックスを返します。このリストに要素が含まれていない場合は-1を返します。(o==null ? get(i)==null : o.equals(get(i)))より正式には、、または-1そのようなインデックスがない場合は、のような最小のインデックスiを返します。

APIは、オブジェクトがnullの場合、リストからnullオブジェクトが最初に出現した場合のインデックスを返すと言っていると思います。nullでない場合は、渡されたオブジェクトequalsメソッドがtrueを返す最初のオカレンスのインデックスを返します。

作成されたオブジェクトは、cities3.indexOf(new Cities("Croydon")以前に追加されたオブジェクトと同じである必要がありますcities3.add(new Cities("Croydon"));か?

4

2 に答える 2

10

検索操作を実行する場合は、equals代わりに再定義します。compareTo

デフォルトでは、indexOfはequals操作を使用して比較します。この場合、equalsは再定義されません。これは、参照による比較があることを意味します。同じ名前で新しいCityオブジェクトを作成すると、オブジェクトへの別の参照があるため、equalsはfalseを返します。

PS都市を説明するオブジェクトを使用している場合、都市ではなく都市のクラスに適した名前

于 2011-10-30T13:17:10.413 に答える
0

Swift 5.3では、オブジェクトがNSObjectを継承している場合は、次のようにする必要があります。

メソッド名は「isEqual」です

public override func isEqual(_ object: Any?) -> Bool {
    if let myObj = object as? MyObj {
        return myObj.someProperty == self.someProperty
    }
    return false
}
于 2021-03-06T23:38:45.667 に答える