好的,所以我有以下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);
这有效!
答案 0 :(得分:1)
在我看来,你的错误是
Arrays.binarySearch(foodArray, "Cereal");
因为“Cereal”不是您要查找的对象,并且您的数组不包含此对象。第二个参数应该是IntoleranceFood类的实例,“Cereal”只是该类的属性。
对于您的问题,我会使用HashMap或其他适合您问题的地图!
也许这篇文章会对您有所帮助:How to sort a HashMap in Java