设置<>为相同的值提供不同的对象

时间:2018-04-17 07:29:04

标签: java android

您好我正在尝试实现基于SQLite的应用程序,并在我的数据库表中有一些值。我的一个列中包含一些类似的值并且为了克服重复,我使用了set<>

public Set<NewTableAnswers> newtableAnswers(String product_id) {
    Set<NewTableAnswers> d = new HashSet<>();
    SQLiteDatabase db = this.getReadableDatabase();

    String SelectA1 = "SELECT * FROM " +TABLE_ANSWERS+ " WHERE " + ANSWER_ID + " = '"+ product_id + "' ";
    Cursor cursor = db.rawQuery(SelectA1,null);
    if (cursor.moveToFirst()){
        do{
            d.add(new NewTableAnswers(cursor.getString(1)));
        }while (cursor.moveToNext());
    }
    db.close();
    return d;

如果有重复,set应该遵循其属性以避免重复,但是它给了我不同对象的相同值...就像这样...

Different objects for same value

更新

这是我的模特课..

public class NewTableAnswers {

String pro_id;

public NewTableAnswers(String pro_id) {
    this.pro_id = pro_id;
}

public String getPro_id() {
    return pro_id;
}

public void setPro_id(String pro_id) {
    this.pro_id = pro_id;
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof NewTableAnswers)) return false;
    NewTableAnswers that = (NewTableAnswers) o;
    return Objects.equals(getPro_id(), that.getPro_id());
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public int hashCode() {

    return Objects.hash(getPro_id());
}

}

Image of the Database

1 个答案:

答案 0 :(得分:1)

我已尝试过您的代码,如果删除注释,它似乎工作正常。

我的猜测是因为注释:

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

方法equalshashCode未被注入。我强烈建议删除这些注释,因为equalshashCode绝不是Kitkat API的独占部分。它们从Java一开始就存在。