当前位置: 首页 > 知识库问答 >
问题:

带对象的二分搜索

白驰
2023-03-14

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

这里有一个问题:“为binarySearch方法提供代码,记住它接收的参数是Object type Object,如果其中任何一个用于调用compareTo方法,则必须首先将其强制转换为可比或原始对象类型。”

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
}

共有1个答案

严修诚
2023-03-14

为了比较对象,如果对象已经实现了carable接口,则可以调用compareto函数。

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

您可以在这里获得更多信息(对于Java8):https://docs.oracle.com/javase/8/docs/api/Java/lang/comparable.html

下面是我如何编写函数的。我将对象强制转换为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;
}

 
 类似资料:
  • 我已经尝试了相关问题的所有答案,如下所示: 我为此使用以下代码: 这里是具有的变量,我希望在ArrayList中搜索该变量。 为此,我得到以下错误: 编辑: 很抱歉之前没有发布这个,排序不是一个问题。我事先已经对数组列表进行了相应的排序。

  • 问题内容: 是否有一个库函数对列表/元组执行二进制搜索,如果找到则返回项目的位置,否则返回“ False”(-1,None等)? 我在bisect模块中找到了函数,但是即使该项目不在列表中,它们仍然会返回位置。这对于他们的预期用途来说是完全可以的,但是我只想知道列表中是否包含某项(不想插入任何内容)。 我考虑过使用然后检查该位置处的项目是否等于我要搜索的项目,但这似乎很麻烦(而且我还需要进行边界检

  • 问题在于从搜索函数返回的MyClass对象(mc)。 我跟踪到Search()并确保“r- “退货”有什么问题吗 谢啦! 我有点困惑。。我可以改为“数据类型BST::搜索(常量字符串名称)”而不是“数据类型*BST::搜索(常量字符串名称)”。。。。编译器似乎无法通过。返回NULL将有一些问题。。。 但是我尝试了你的方法来更改DataType*没有de::getIthem()它仍然有错误.....

  • 对于我当前的项目,我必须搜索ArrayList of ZipCode对象,以便找到距离用户输入的int zip最远的ZipCode。 下面是编写我遇到问题的方法的说明:public ZipCode findfurtwest(int-pZip)-查找距离提供的邮政编码最远的ZipCode。如果未找到邮政编码,则返回null。例如,距离邮政编码75234最远的是ADAK,AK 99546。 在我的代码

  • 主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复

  • 问题内容: 有什么方法可以在具有对象的ArrayList中实现二进制搜索?在此示例中,ArrayList将使用字段“ id”进行排序。 如果我应该使用二进制搜索返回具有指定ID的用户,“ User getUserById(ArrayList users,int userid)”将如何?这有可能吗? 问题答案: Java教程的对象排序文章中有一个示例,您可以编写自己的示例以对自定义类型进行比较。 然