我有两个排序的唯一项列表,我想以一种快速且易于缓存的方式找到它们的设置差异和设置交集,例如使用C ++ std :: set_difference和std :: set_intersection。
但是,现在我在Kotlin工作,找不到相应的功能。由于Kotlin标准库建立在Java标准库之上,因此欢迎Java回答。
我通读了这个,这个大问题以及所有答案,但是据我所知,它们仅处理任意集合,因此丧失了排序性。
这同样适用于番石榴。
在这里,在最坏的情况下运行O(n + m)的合并相交实现
static <T extends Comparable<T>> List<T> intersect(List<T> list1, List<T> list2) {
final int size1 = list1.size();
final int size2 = list2.size();
final List<T> result = new ArrayList<>(Math.min(size1, size2));
int i = 0;
int j = 0;
while (i < size1 && j < size2) {
T a = list1.get(i);
int compare = a.compareTo(list2.get(j));
if (compare < 0)
i++;
else if (compare > 0)
j++;
else {
result.add(a);
i++;
j++;
}
}
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句