【发布时间】:2013-03-26 09:53:59
【问题描述】:
我有一个算法来构建两个排序列表的交集。如果我在性能测试中将它与 java.util.BitSet 进行比较,我的算法很慢。
public static List<Integer> intersection(List<Integer> list1, List<Integer> list2) {
int size1 = list1.size(), size2 = list2.size();
int capacity = size1 < size2 ? size1 : size2;
List<Integer> intersection = new ArrayList<Integer>(capacity);
int i1 = 0, i2 = 0;
while (i1 < size1 && i2 < size2) {
if (list1.get(i1) < list2.get(i2))
i1++;
else if (list2.get(i2) < list1.get(i1))
i2++;
else {
intersection.add(list2.get(i2++));
i1++;
}
}
return intersection;
}
有人看到任何改进吗?
谢谢
【问题讨论】:
-
使用
BitSet,甚至int[]。为ArrayList指定容量可能是一个错误。可能不需要那么大。此外,每个循环只需要两个gets。如果您只在关联的增量上使用get,即使这样也可以减少。您可能需要考虑使用Iterators,尤其是当您获得LinkedList作为参数时。
标签: java intersection sortedlist