高效的Java函数从有序数组中检索ID

时间:2011-08-29 00:16:36

标签: java search

在Java程序中,我有一个对象数组。每个对象都有一个ID号的字段,所有字段都是公共的(没有getter和setter)。数组按ID号排序,ID号是一个整数。我不想使用for循环或类似技术来遍历每个对象,因为数组可能很大。所以,

  1. 什么搜索算法可以有效地做到这一点,并且......
  2. 有一个方便的Java方法,我会这样搜索我 不必自己写吗?

3 个答案:

答案 0 :(得分:3)

使用java.util.Arrays.binarySearch()(如果它是一个基元数组或者你有一个Comparator)或java.util.Collections.binarySearch()(如果你有一个自己的Comparable的非数组集合)对象)。

听起来像Arrays.binarySearch更适合你的问题。写一个合理的java.util.Comparator,了解你的订购。

答案 1 :(得分:2)

  

什么搜索算法

二进制搜索。

  

有功能吗?

是的,binarySearch in java.util.Arrays

唯一的问题是你需要写一个Comparator来提取id字段。有点像,如果你有一个班级

static class A {
    int id;

    A(int _id) { this.id = _id; }
}

它可能看起来像

Comparator<A> idComp = new Comparator<A>() {
    public int compare(A a1, A a2) {
        return new Integer(a1.id).compareTo(a2.id);
    }

    public boolean equals(A a1, A a2) {
        return a1.id == a2.id;
    }
};

答案 2 :(得分:0)

执行此操作的一种方法是获取订单数组,并将其搜索为二叉树。从中间开始,如果您要查找的数字大于查询数,则在1/2 - 3/4 - 1部分重复,如果小于,则重复0 - 1/4 - 1/2部分

使其递归,并接受数组子集。在第一次调用时,它将是整个数组,在第二次调用时,它将是更高或更低的ID的一半,而在第三次调用时,它实际上将是原始数据的四分之一......依此类推。 / p>