我想在對象數組上使用二分搜索。我正在使用對象,因爲對於一個實例,我可能有一組字符串或ints
。我目前堅持實施我的compareTo
方法,並不確定下一步會是什麼。 這裏是我迄今爲止 -二進制搜索CompareTo Java
public static int binarySearch(Object[] items, Comparable target, int first, int last){
if(first > last)
return -1; // Base case for unsuccessful search
else{
int middle = (first + last)/2; // Next probe index.
int compResult = target.compareTo(items[middle]);
if(compResult == 0)
return middle; // Base case for unsuccessful search.
else if (compResult <0)
return binarySearch(items, target, first, middle -1);
else
return binarySearch(items, target, middle + 1, last);
}
}
public static int binarySearch(Object[] items, Comparable target){
return binarySearch(items, target, 0, items.length -1);
}
@Override
public int compareTo(T obj) {
return 0;
}
public static void main(String[] args){
String[] names = {"Caryn", "Debbie", "Dustin", "Elliot", "Jacquie", "Jonathan", "Rich"};
int myName = binarySearch(names, "Dustin");
當我打電話,我得到一個錯誤的binarySearch它說,在類型FiveThree方法的binarySearch(Object []對象,可比)不適用的參數(字符串[],字符串)。我知道它是因爲我的CompareTo
現在是空的,但我不知道如何製作「達斯汀」或其他參數,我把第二個比較而不是字符串。另外,如果我在名稱前面投射對象,它只會將它識別爲一個對象而不是對象[]。
謝謝。
爲什麼使用原始類型而不是泛型? – RealSkeptic 2015-03-30 21:19:39
我想這對我來說是不好的,所以我應該把它改成像列表 names = Arrays.asList(「Caryn」,「Debbie」,「Dustin」,「Elliot」,「Jacquie」,「Jonathan」,「Rich 「); –
jumpman8947
2015-03-30 21:32:37
@ jumpman8947不,RealSkeptic意味着你不應該使用原始類型「Comparable」。使用數組很好。 – 2015-03-30 21:36:21