9.5.4 批量操作
有几个批量复制和移动元素的操作:
coll1.removeAll(coll2);
从coll1中移除所有属于coll2的元素。相反:
coll1.remainAll(coll2);
从coll2中移除所有不属于coll2的元素。这里有一个典型应用。
假设你想要求两个集合的交集。首先,创建一个新的Set来存储结果:
Set<String> result = new HashSet<>(a);
这里,我们利用了一个事实:所有集合类都有一个构造方法能接收其他集合来给这个新构造的集合提供初始值。
接着使用方法remainAll:
result.remainAll(b);
这让我们无需使用循环语句就可以求两个集合的交集。
你可以更进一步,对一个视窗使用批量操作。例如,假设你有一个从雇员ID到雇员的映射,你还有一个需要解雇的雇员ID的Set:
Map<String, Employee> staffMap = ...;
Set<String> terminatedIDs = ...;
只需创建key set并移除要解雇的雇员ID:
staffMap.keySet().removeAll(terminatedIDs);
因为key set是map的视窗,当key从key set中移除时,此key和相应的value将从底层的map自动移除。
通过使用原始集合的一个子区间的视窗,你可以将批量操作作用于子列表和子集。例如,如果你想要将一个list的前10个元素加到另一个容器。先由该list的前10个元素形成子list:
relocated.addAll(staff.subList(0,10));
子区间视窗也能调用mutator:
staff.subList(1,10).clear();