我需要在数组上使用二进制搜索来找到它们的索引。我能够做到这一点,但是我现在需要使用数组类型为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
}
为了比较对象,如果对象已经实现了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教程的对象排序文章中有一个示例,您可以编写自己的示例以对自定义类型进行比较。 然