我试图比较两个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中的一些方法?
由于
答案 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维护索引关联性。