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

How to do set operations on sorted lists in Kotlin or Java?

我有两个唯一项目的排序列表,我想找到它们的集合差异并以快速且缓存友好的方式设置交集,例如使用 C++ std::set_difference and std::set_intersection

但是,现在我在Kotlin工作,找不到相应的功能。由于 Kotlin 标准库是在 Java 标准库之上构建的,因此欢迎 Java 回答。

我通读了 this and this 很好的问题和所有答案,但据我所知,它们只处理任意集合,因此无法排序

Guava也是如此。

这里是在最坏情况下运行 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;
}