如何在Kotlin或Java中对排序列表进行设置操作?

马丁·卓兹迪克(Martin Drozdik):

我有两个排序的唯一项列表,我想以一种快速且易于缓存的方式找到它们的设置差异和设置交集,例如使用C ++ std :: set_differencestd :: 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章