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