我有一個算法來構建兩個排序列表的交集。如果我在性能測試中將它與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'的容量可能是一個錯誤。可能不需要那麼大。每個循環只需要兩個'get's。即使只是在相關的增量上「獲得」,也可以減少這種情況。你可能要考慮使用'Iterator's,特別是如果給你一個'LinkedList'作爲參數。 – 2013-03-26 10:02:29