对于一个对象数组,是否可以实现一个二进制搜索方法(最好使用Arrays.binarySearch),并且需要匹配多个键值?
比如说,数组的对象类型有一个obj(String a, String b, int c)
的构造函数。我如何实现Arrays.binarySearch来查找具有相同值的对象String a
和String b
代表我指定的? (例如Arrays.binarySearch(arrayName, value for varX, value for varY)
)
当然,为每个对象添加唯一标识符更有意义,但在这种情况下,我无法做到。
我应该对对象类中的compareTo
做些什么(就像我已经为排序做的那样)?
非常感谢任何帮助。
谢谢你,祝你有愉快的一天!
答案 0 :(得分:1)
我们在这里使用
Comparable
来比较对象。
要遵循的步骤:
Comparable
compareTo()
方法中比较基于a
和b
a
方法中传递一个虚拟对象,其值设置为b
和binarySearch()
。试试这个简单的代码:
import java.util.Arrays;
public class DemoTest {
/**
* @param args
*/
public static void main(String[] args) {
MyClass[] array = new MyClass[10];
for (int i = 0; i < array.length; i++) {
array[i] = new MyClass(String.valueOf(i), String.valueOf(i + 10), i + 20);
}
// sort before binary search
Arrays.sort(array);
int index = Arrays.binarySearch(array, new MyClass("5", "15"));
if (index > -1) {
System.out.println("found at " + index);
} else {
System.out.println("not found");
}
index = Arrays.binarySearch(array, new MyClass("6", "15"));
if (index > -1) {
System.out.println("found at " + index);
} else {
System.out.println("not found");
}
}
}
class MyClass implements Comparable<MyClass> {
private String a;
private String b;
private int c;
public MyClass(String a, String b) {
this.a = a;
this.b = b;
}
public MyClass(String a, String b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public int compareTo(MyClass o) {
int result = this.a.compareTo(o.a);
if (result == 0) {
return this.b.compareTo(o.b);
} else {
return result;
}
}
}