Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用binarySearch在ArrayList中查找对象_Java_Binary Search - Fatal编程技术网

Java 使用binarySearch在ArrayList中查找对象

Java 使用binarySearch在ArrayList中查找对象,java,binary-search,Java,Binary Search,我在ArrayList中搜索对象时遇到问题 这是我目前的代码: public static int binarySearch( ArrayList list, Object key ) { Comparable comp = (Comparable)key; int res = -1, min = 0, max = list.size() - 1, pos; while( ( min <= max ) && ( res == -1 ) ) {

我在ArrayList中搜索对象时遇到问题

这是我目前的代码:

public static int binarySearch( ArrayList list, Object key ) {
    Comparable comp = (Comparable)key;

    int res = -1, min = 0, max = list.size() - 1, pos;
    while( ( min <= max ) && ( res == -1 ) ) {
        pos = (min + max) / 2;
        int comparison = comp.compareTo(pos);
        if( comparison == 0)
            res = pos;
        else if( comparison < 0)
            max = pos - 1;
        else
            min = pos + 1;
    }
    return res;
}

程序总是返回-1,这意味着它永远找不到正在搜索的对象?你看到什么错误了吗?或者我的搜索测试不正确?

您正在将
comp
pos
进行比较,这就像将
可比较的
(在本例中,是
字符串
)与
整数进行比较一样:

int comparison = comp.compareTo(pos);
相反,您应该检索列表中
pos
索引中的元素,并使用该元素进行比较:

int comparison = comp.compareTo(list.get(pos));

当然,这是有道理的!但是在更改之后,我仍然收到-1,即使在本例中索引应该是0?@theOGloc我刚刚复制并粘贴了您的代码和我的更改,并打印了index0的二月。将键更改为“June”
,并在index2处打印June。确保保存更改,重新编译并重新运行测试。当然可以。我意识到我有一个自定义的不完整ArrayList类,它给了我错误的列表大小。谢谢你的帮助<代码>新字符串(“二月”)
毫无意义。只要写下“二月”
。通过传递另一个
字符串来构造
字符串
是没有用的。
int comparison = comp.compareTo(list.get(pos));