![](/img/trans.png)
[英]How do you implement a jump search for object arrays in a java program?
[英]How do you implement a binary search for object arrays in a general program?
因此,我正在學習Java,並且正在學習有關排序,搜索,算法和泛型的知識。 我正在嘗試重新創建一個接受任何類型的Comparable
對象(例如ArrayList < Type >)的二進制搜索方法/類。
我了解如何使用int
s,但是我真的不知道如何使用非原始類型實現它。 我認為這應該大致如下:
public class Objects<T> implements Comparable //I'm not sure about this,
//but I need to call compareTo() to compare the objects?
{
/**
* called from other program to find an element index in an array
*/
public static int binSearchAll(T find, T array[])
{
return binarySearch(array, 0, (array.length)-1, find);
}
public static int binarySearch(T array[], int lower, int upper, T X)
//x is the element to find
{
if (upper < lower)
return -1;
int middle = (lower + upper) / 2;
if (array[middle].compareTo(X))
return middle;
if (array[middle] < X)
return binarySearch(a, middle+1, upper, X);
else
return binarySearch(a, lower, middle-1, X);
}
}
我試圖弄清楚如何進行這項工作,但我很茫然。 在int
版本中,它可以工作,但隨后僅適用於integer
類型,並且不接受問題所要求的double
或string
類型。
在驅動程序類中,我希望能夠創建一個新對象並像這樣使用它:
String[] str = {"a", "b", "c"};
Objects<String> s = new Objects<String>();
int indexOfB = s.binSearchAll("b", str);
或者,如果可能的話,如下所示:
String[] str = {"a", "b", "c"};
int indexOfB = Object<String>.binSearchAll("b", str);
該問題的確切措辭是:
創建一個ObjectBinarySearcher類,該類可以搜索Comparable對象的數組。 演示程序中的類,該程序在String對象數組中搜索String。
我幾乎可以肯定我對此有過多思考。
謝謝你提供的所有幫助!
這兩行是問題所在:
if (array[middle].compareTo(X))
...
if (array[middle] < X)
... compareTo
返回一個int
而不是一個boolean
,並且您不能在任意類型上使用<
。 我懷疑您已經意識到了很多,但是我只是給您一個提示:閱讀Comparable.compareTo
文檔。 您需要使用compareTo
而不是<
...閱讀有關返回值的文檔,以計算出需要執行的操作。
(您可能只想調用一次compareTo
,然后兩次檢查結果。如文檔所述,有三種可能的考慮方法...)
您需要模板類T
實現Comparable
接口。 您的實際代碼意味着只有Objects
類實現該接口。 你必須轉
public class Objects<T> implements Comparable {
//class content...
}
成
public class Objects<T extends Comparable<T>> {
//class content...
}
而且,請遵循JonSkeet的答案中關於compareTo
方法的建議。
您需要模板類T實現Comparable接口。 您的實際代碼意味着只有Objects類實現該接口。 你必須轉
public class Objects<T> implements Comparable { //class content... }
成
public class Objects<T extends Comparable<T>> { //class content... }
和...
這兩行是問題所在:if(array [middle] .compareTo(X))... if(array [middle] <X)... compareTo返回一個int而不是布爾值,並且您不能使用<在任意類型上。 我懷疑您已經意識到了很多,但是我只是給您一個提示:閱讀Comparable.compareTo文檔。 您需要使用compareTo而不是<...閱讀有關返回值的文檔,以計算出需要執行的操作。
(您可能只想調用一次compareTo,然后檢查兩次結果。如記錄所示,有三種可能的考慮方法...) Jon Skeet
感謝您的回答。 結合起來,我設法使程序正常工作。 現在可以使用:
String[] str = {"a", "b", "c"};
Objects<String> s = new Objects<String>();
int indexOfB = s.binSearchAll("b", str);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.