java.util.Collection的经典集合操作

时间:2020-03-06 15:02:37  来源:igfitidea点击:

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

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

经过一番搜索,我只能找到本地解决方案。另外,我意识到我可能会将"集合"的概念与"集合"的概念混淆,分别不允许和允许重复。也许这实际上只是Set接口的功能?

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

解决方案

我们是否在寻找java.util.Set接口(及其实现HashSet和TreeSet(已排序))?
该接口定义了看起来像substract()的removeAll(Collection c)和看起来像相交的keepAll(Collection c)。

我会推荐谷歌番石榴。 Sets类似乎完全具有我们要查找的内容。它具有相交法和差分法。

如果我们有兴趣,可能需要观看此演示文稿。它指的是Google收藏集,这是Guava的原始名称。

交叉是通过Collection.retainAll完成的;用Collection.removeAll减去;与Collection.addAll联合。在每种情况下,因为"集合"将像集合一样起作用,而"列表"将像列表一样起作用。

作为易变的对象,它们在适当的地方起作用。如果要保留原始的可变对象不变,则需要显式复制。