java.util.Collection类上的经典集合操作是否有内置功能?我的具体实现将是ArrayList,但这听起来应该适用于Collection的所有子类。我正在寻找类似的东西:

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

经过一番搜索,我才能找到本土解决方案。此外,我意识到我可能会混淆“设置”的想法。具有“收集”的概念,分别不允许和允许重复。也许这只是Set界面的功能?

如果没有人知道任何内置功能,或许我们可以将其用作标准实践Java集操作代码的存储库?我想这个轮子已经多次重新发明了。

有帮助吗?

解决方案

交叉点用 Collection.retainAll 完成;使用 Collection.removeAll 进行减法;与 Collection.addAll 结合使用。在每种情况下,因为 Set 就像一个集合, List 就像一个列表。

作为可变对象,它们在适当的位置运行。如果要保留原始可变对象未突变,则需要显式复制。

其他提示

我建议 Google Guava 设置 class似乎正是你想要的。它有一个 intersection 方法和差异方法。

此演示文稿可能是您要观看的内容如果你有兴趣它指的是Google Collections,它是Guava的原始名称。

您是否正在寻找 java.util.Set 接口(及其实现HashSet和TreeSet(已排序))?
接口定义了removeAll(Collection c),它看起来像substract(),而retainAll(Collection c)看起来像是交集。

对于可变操作,请参阅接受的答案。对于不可变的变体,您可以使用java 8执行此操作

减法

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

相交

set1
  .stream()
  .filter(item-> set2.contains(item))
  .collect(Collectors.toSet())
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top