从其他元素中删除一个Collection元素

时间:2015-05-01 10:12:45

标签: java data-structures collections

嗨我有两个SomeType a1,a2的集合,想要从a1中删除a2的所有元素。

请建议我需要使用哪种类型的收藏:

  1. 的ArrayList
  2. 链表
  3. 其他一些?。
  4. 有没有这个库?

4 个答案:

答案 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)

要从集合中删除,您需要覆盖equalshashCode的对象(在您的情况下为SomeType)。 然后,您不需要图书馆,只需使用removeAll方法

Collection<SomeType> a1 = new ArrayList<SomeType>();
Collection<SomeType> a2 = new ArrayList<SomeType>();
a1.removeAll(a2);