Arrays.binarySearch具有多个键值作为要求

时间:2014-04-07 19:28:33

标签: java arrays key binary-search

对于一个对象数组,是否可以实现一个二进制搜索方法(最好使用Arrays.binarySearch),并且需要匹配多个键值?

比如说,数组的对象类型有一个obj(String a, String b, int c)的构造函数。我如何实现Arrays.binarySearch来查找具有相同值的对象String aString b代表我指定的? (例如Arrays.binarySearch(arrayName, value for varX, value for varY)

当然,为每个对象添加唯一标识符更有意义,但在这种情况下,我无法做到。

我应该对对象类中的compareTo做些什么(就像我已经为排序做的那样)?

非常感谢任何帮助。

谢谢你,祝你有愉快的一天!

1 个答案:

答案 0 :(得分:1)

  

我们在这里使用Comparable来比较对象。

要遵循的步骤:

  • 为您的自定义类实施Comparable
  • compareTo()方法中比较基于ab
  • 的值
  • 现在在二进制搜索之前对数组进行排序
  • a方法中传递一个虚拟对象,其值设置为bbinarySearch()
  • 这就是全部

试试这个简单的代码:

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;
        }
    }

}