9.5.4批量操作

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值