为java.util.Collection中的经典集合操作(Classical set operat

2019-09-02 02:01发布

是否有对java.util.Collection的类经典组操作任何内置的功能? 我的具体实施将是ArrayList中,但是这听起来似乎应该申请收集的所有子类。 我在寻找类似:

ArrayList<Integer> setA ...
ArrayList<Integer> setB ...
ArrayList<Integer> setAintersectionB = setA.intersection(setB);
ArrayList<Integer> setAminusB = setA.subtract(setB);

经过一番搜索,我才能够找到本土的解决方案。 此外,我意识到我可能混淆了“集”的概念与“收藏”的概念,不允许分别允许重复。 也许,这实际上只是设置界面功能?

在没有人的任何内置功能都知道的情况下,也许我们可以以此为标准做法的Java设置操作代码库? 我想这轮已经被彻底改造了无数次。

Answer 1:

路口与做Collection.retainAll ; 减法Collection.removeAll ; 工会与Collection.addAll 。 在每一种情况下, Set会像一组和List将被用作一个列表。

作为可变对象,他们在的地方进行操作。 如果你想保留未突变原可变对象你需要明确复制。



Answer 2:

我建议谷歌番石榴 。 该集合类似乎有你在寻找什么。 它有一个交叉点方法和差分方法。

此演示文稿可能是你想如果你有兴趣看的东西。 它指的是谷歌集合,这是番石榴的原名。



Answer 3:

您是否正在寻找为java.util.Set接口(及其实现的HashSet和TreeSet的(排序))?
该接口定义的removeAll(Collection c)将它看起来像。减去(),和中的retainAll(Collection c)将看起来像相交。



Answer 4:

对于可变操作见接受的答案。

对于imutable变种,你可以用java 8要这样做

减法

set1
  .stream()
  .filter(item-> !set2.contains(item))
  .collect(Collectors.toSet())

路口

set1
  .stream()
  .filter(item-> set2.contains(item))
  .collect(Collectors.toSet())


文章来源: Classical set operations for java.util.Collection