我创建了一个扩展ArrayList的类,名为sortedWordList,用于保存和排序字符串。我想实现二进制搜索来覆盖indexOf方法。
我无法使用compareTo来比较我的字符串。我知道我将类型Object传递给compareTo,但我认为必须是我的参数类型才能覆盖ArrayList的indexOf方法。
我的二进制搜索算法可能不正确,因为我还没有机会调试它,所以你可能会忽略它。
@Override
public int indexOf(Object o) {
int min = 0;
int max = len - 1;
while (true){
int mid = (int)((min + max)/ 2);
if (this.get(mid).compareTo(o) == 0){
return(mid);
}
if (this.get(mid).compareTo(o) < 0){
min = mid;
}
else if (this.get(mid).compareTo(o) > 0){
max = mid;
}
if (max == mid) break;
}
return -1;
}
答案 0 :(得分:1)
如果您的this.get(i)
返回String
,您可能希望让方法签名为
public int indexOf(String o)
而不是扩展ArrayList
,您可能需要encapsulate it。
修改强>:
如果您被迫坚持使用该方法签名,请使用Object
将String
转换为String.valueOf(o)
。