在Object数组上使用Arrays.binarySearch并在对象中查找String

时间:2014-03-19 15:24:24

标签: java android arrays

好的,所以我有以下Object类:

public class IntoleranceFood implements Comparable<IntoleranceFood>{

private int scoreInt;
public String foodName;

public IntoleranceFood(String food, int score) {
    super();
    this.foodName = food;
    this.scoreInt = score;

}

//getters and setters
public String getFood() {
        return foodName;
}
public void setFood(String food) {
        this.foodName = food;
}
public int getScore() {
    return scoreInt;
}
public void setScore(int score) {
        this.scoreInt = score;
}


@Override
public String toString() {
    return "Intolerance Food [Name=" + foodName + ", Score=" + scoreInt + "]";
}

@Override
public int compareTo(IntoleranceFood arg0) {

    return toString().compareTo(arg0.toString());
}

}

然后在我的Activity中我为这些对象创建了一个数组,并使用&#34; IntoleranceFood&#34;填充数组。对象:

int numFoodItemTypes = db.intoleranceFoodItemTypesTotal();
    IntoleranceFood[] foodArray = new IntoleranceFood[numFoodItemTypes];

    Cursor cAllFoodTypes = db.intoleranceFoodTypesList();
    int foodItem = 0;
    do{
        foodArray[foodItem] = new IntoleranceFood(cAllFoodTypes.getString(0), 0);
        foodItem++;
    }while(cAllFoodTypes.moveToNext());

我设法通过在Object类中实现Comparable和compareTo方法来对数组进行排序:

Arrays.sort(foodArray);

但我想使用二进制搜索搜索数组,并查找数组中具有特定食物名称(String)的某个Object所在的位置。但我不知道如何使以下代码工作,特别是在以下方面: -binarySearch(Object []数组,对象值)
我不知道该放入什么&#34;对象值&#34;所以这个:

Arrays.binarySearch(foodArray, "Cereal");
显然错了!但是我不确定如何在Object数组中搜索包含String食物名称的对象&#34; Cereal&#34;。

感谢。


是的,所以在下面非常有用的回复之后,我重新判断我需要做的是:

IntoleranceFood searchOb = new IntoleranceFood("Cereal",0);

    int searchIndex = Arrays.binarySearch(foodArray, searchOb);

这有效!

1 个答案:

答案 0 :(得分:1)

在我看来,你的错误是

Arrays.binarySearch(foodArray, "Cereal");

因为“Cereal”不是您要查找的对象,并且您的数组不包含此对象。第二个参数应该是IntoleranceFood类的实例,“Cereal”只是该类的属性。

对于您的问题,我会使用HashMap或其他适合您问题的地图!

也许这篇文章会对您有所帮助:How to sort a HashMap in Java