【问题标题】:Binary search with objects对象二分查找
【发布时间】:2021-05-19 00:57:37
【问题描述】:

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

这是一个问题: “提供 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
}

【问题讨论】:

    标签: java object binary-search


    【解决方案1】:

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

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

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

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

    这是我编写函数的方式。我将 Object 转换为 Integer,因为 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;
    }
    
     
    

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2014-12-11
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2012-12-24
      相关资源
      最近更新 更多