Java 将字符串与需要对象作为参数的compareTo进行比较

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

我创建了一个扩展ArrayList的类,名为sortedWordList,用于保存和排序字符串。我想实现一个二进制搜索来覆盖indexOf方法

我无法使用compareTo来比较字符串。我知道我正在将type对象传递给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;
}
@覆盖
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
的其余操作。