二分查找对象
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;
}
我需要对数组使用二进制搜索来查找它们的索引。我能够做到这一点,但是我现在需要使用数组类型为 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;
}