比较两个列表并删除两个列表中的值的较短方法?

时间:2014-03-17 03:29:13

标签: java arraylist

我试图比较两个ArrayLists并从列表中删除值,如果它们出现在第二个列表中。两个列表都包含相同的类:" EditableListItem。

ArrayList<EditableListItem> items = new ArrayList<EditableListItem>();
ArrayList<EditableListItem> addedItems = new ArrayList<EditableListItem>();

我已经编写了这段代码,但是我觉得这不是一个很好的解决方案。

    int remove_n = -1;
    for(int k=0;k<addedItems.size();k++)
    {
        for(int i=0;i<items.size();i++)
        {
            if(items.get(i).getKey().equals(addedItems.get(k).getKey()))
            {
                remove_n = i;
            }
        }
        if(remove_n > -1)
        {
            items.remove(remove_n);
            remove_n = -1;
        }
    }

有没有办法用更少的线条来做到这一点?或者也许使用ArrayList中的一些方法?

由于

3 个答案:

答案 0 :(得分:1)

要从其他集合中的集合中删除所有项目,请使用removeAll

items.removeAll(addedItems);

答案 1 :(得分:1)

您可以使用ArrayList#removeAll(Collection c),例如items.removeAll(addedItems)

如果您希望它运行得更快,请从一个集合中创建一个HashSet,然后调用它的removeAll()方法。

答案 2 :(得分:0)

你可以记下所有数组索引(在两个数组中),其中数组元素相同,并且你可以通过两个列表进行迭代,使用

删除公共元素
items.remove(index);

方法

不要在没有完全迭代两个arraylists的情况下删除,因为当你删除一个元素时,所有后续元素的数组索引都会改变。

否则,如果您想在一个循环中执行此操作,当您删除元素时,将循环变量减1,以便为两个arraylists维护索引关联性。