嗨我有两个SomeType a1,a2的集合,想要从a1中删除a2的所有元素。
请建议我需要使用哪种类型的收藏:
有没有这个库?
答案 0 :(得分:5)
感谢所有人。 阅读完回复后,我创建了一个过滤器类,如下所示:
public class Filter {
public <T> Set<T> filter(Set<T> all, Set<T> blocked) {
for (T t : all) {
if(blocked.contains(t)) {
all.remove(t);
}
}
return all;
}
}
答案 1 :(得分:2)
使用收集方法Collection.removeAll(Collection<?> c);
答案 2 :(得分:2)
好吧,您可以使用a1.removeAll(a2)
,但如果您的收藏集为HashSet
,则移除效率会更高(因为在HashSet中搜索元素需要O(1)
,而在{ {1}}需要List
)。是否可以使用O(n)
取决于a1和a2是否可以包含重复元素。
答案 3 :(得分:2)
要从集合中删除,您需要覆盖equals
和hashCode
的对象(在您的情况下为SomeType)。
然后,您不需要图书馆,只需使用removeAll
方法
Collection<SomeType> a1 = new ArrayList<SomeType>();
Collection<SomeType> a2 = new ArrayList<SomeType>();
a1.removeAll(a2);