Java 将字符串与需要对象作为参数的compareTo进行比较
我创建了一个扩展ArrayList的类,名为sortedWordList,用于保存和排序字符串。我想实现一个二进制搜索来覆盖indexOf方法 我无法使用compareTo来比较字符串。我知道我正在将type对象传递给compareTo,但我认为这必须是我的参数类型,才能覆盖ArrayList的indexOf方法 我的二进制搜索算法可能不正确,因为我还没有机会调试它,所以您可以忽略这一点Java 将字符串与需要对象作为参数的compareTo进行比较,java,string,comparable,compareto,Java,String,Comparable,Compareto,我创建了一个扩展ArrayList的类,名为sortedWordList,用于保存和排序字符串。我想实现一个二进制搜索来覆盖indexOf方法 我无法使用compareTo来比较字符串。我知道我正在将type对象传递给compareTo,但我认为这必须是我的参数类型,才能覆盖ArrayList的indexOf方法 我的二进制搜索算法可能不正确,因为我还没有机会调试它,所以您可以忽略这一点 @Override public int indexOf(Object o) { int min
@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;
}
@覆盖
public int indexOf(对象o){
int min=0;
int max=len-1;
while(true){
int mid=(int)((最小+最大)/2);
if(this.get(mid).compareTo(o)==0){
返回(mid);
}
如果(此.get(mid).compareTo(o)<0){
最小=中等;
}
如果(this.get(mid).compareTo(o)>0){
最大值=中间值;
}
如果(最大==中间)断裂;
}
返回-1;
}
如果您的this.get(i)
返回一个字符串
,您可能希望将方法签名设置为
public int indexOf(String o)
而且,您可能不想扩展ArrayList
,而想扩展它
编辑:
如果您被迫坚持使用该方法签名,请使用
String.valueOf(o)
将对象
转换为String
,不幸的是,分配要求我重写该方法:(您是否尝试过强制转换?this.get(mid).compareTo((String)o)
。它也在迫使你扩展ArrayList?看起来你的作业在迫使你编写糟糕的代码,这对于本应教给你相反的东西来说是很不幸的。用这种方式重载索引是个坏主意。它会让那些已经很难使用对象的方法的人感到困惑n不要使用E
,这会使情况变得更糟。相反,请提取字符串.valueOf
o
(错误的变量名)然后将其输入到compareTo
,这确实需要一个泛型参数。如果o
为null
,则可能会使问题复杂化。最好先检查o
是否为null
,如果是,则返回“notfound”,然后再执行indexOf
的其余操作。