1

情報を保持するクラスがありArrayList、このリストにオブジェクトを追加したいと考えています。リストに追加する前に、そのリストにすでに番号が含まれているかどうかを確認したいと思います。

通常、それが単なる文字列のリストである場合、私はこのようなことをするだけです

if(!list.contains("this string")){
    list.add("this string");
}

ただし、これはクラスであるため、インデックスごとに複数の変数があります。

クラスの世界の例は次のとおりです。

private class From{
    private long threadID;
    private long date;
    private String address;
    private String body;
    private int type;
    private long id;

    @Override
    public boolean equals(Object obj){
        if(obj != null){
            if(getClass() != obj.getClass()){
                return false;
            }else{
                final From from = (From)obj;
                if((this.address != null) ? (from.address != null) : !this.address.equals(from.address)){
                    return false;
                }
            }
        }else{
            return false;
        }
        return true;
    }
}

同じ番号のエントリが既に存在するかどうかを確認したいので、各インデックスを手動でループして確認する必要がありますか?

編集:

私はそれをどのように呼んでいますか

HashSet<From> addresses = new HashSet<From>();
From f = new From();
                f.setAddress(messages.getString(3));
                f.setBody(messages.getString(0));
                f.setDate(messages.getLong(2));
                f.setThreadId(messages.getLong(1));
                f.setType(1);
                if(!addresses.contains(f.address)){
                    addresses.add(f);
                }
4

4 に答える 4

4

リストの代わりにセットを使用します。セットは重複を許可しません

http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html

また、クラス内のequalsをオーバーライドして、2つのオブジェクトが等しいかどうかをセットが認識できるようにする必要があります。

equalsをオーバーライドする例はここにあります:Javaでequalsメソッドをオーバーライドする方法

于 2013-02-21T17:28:16.727 に答える
1

もう1つの方法は、2つのInfoオブジェクトが同じ番号である場合に、それらが等しくなるようoverride equals()Infoオブジェクトを作成することです。要素をリストに追加する前に、equals()テストを実行してください。

于 2013-02-21T17:28:28.617 に答える
1

これをオーバーライドする必要がありますequals(Object o)。これは、2 つのオブジェクト間の等価性を定義するロジックを定義する必要がある場所です。

オーバーライドhashCode()することもお勧めです。詳細については、Javadoc を参照してObjectください。

于 2013-02-21T17:27:44.440 に答える
0

containsメソッドは引き続き使用できます。AListはこのequalsメソッドを使用して、アイテムがリストに存在するかどうかを判断します。equalsただし、オブジェクトでオーバーライドする必要がありますInfo

于 2013-02-21T17:30:44.257 に答える