二分查找对象

Binary search with objects

我需要对数组使用二进制搜索来查找它们的索引。我能够做到这一点,但是我现在需要使用数组类型为 Integer 而不是 int 的对象。

问题如下: "为 binarySearch 方法提供代码,记住它接收的参数是 Object 类型对象,如果其中任何一个用于调用 compareTo 方法,则必须首先将其转换为 Comparable 或原始对象类型。"

如果我能得到更多关于它的信息(如果不是它的代码),我将不胜感激。这个问题让我有点困惑。

这是传递给二进制搜索方法的数据类型。

int i[] = {-7, 15, 21, 22, 43, 49, 51, 67, 78, 81, 84, 89, 95, 97};
    Integer iw[] = new Integer[14];
    for(int k = 0; k < 14; k++)
    {
        iw[k] = i[k];
    }
private static int binarySearch(Object a[], Object srchVal)
{
//binary search code
}

要比较对象,可以调用compareTo函数,如果对象实现了Comparable接口。

java 中的 Comparable 接口有一个方法 public int compareTo(Object obj) 如果调用方对象大于传递给方法的对象,则 returns 为正整数,如果调用方为负整数较小,如果相同则为零。

您可以在此处获得更多信息(针对 Java 8):https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

至于您的问题,他们要求您将传递的 Object 转换为已实现 Comparable 接口的问题。您可以将其转换为 Integer(原始对象类型)或任何用户定义的 class 实现 Comparable 并定义了 compareTo 方法。

下面是我写的函数。我将 Object 转换为整数,因为 Integer 对象具有 compareTo 函数的默认实现。

public static int binarySearch(Object a[], Object srchVal)
{
    
    int l = 0, h = a.length-1, mid;
    while(l <= h) {
        mid = l + (h - l)/2;
        if( ((Integer)a[mid]).compareTo((Integer) srchVal) == 0  ) {
            return mid;
        }
        else if( ((Integer)a[mid]).compareTo((Integer) srchVal) < 0 ) {
            l = mid + 1;
        }
        else {
            h = mid - 1;
        }
    }

    return -1;
}