java比较两个列表并删除两个列表中的值的较短方法?
我试图比较两个ArrayList,如果它们出现在第二个列表中,则从列表中删除它们。两个列表都包含相同的类:“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中的某些方法
谢谢
# 1 楼答案
您可以使用
ArrayList#removeAll(Collection c)
,例如items.removeAll(addedItems)
如果希望它运行得更快,可以从一个集合中创建一个HashSet,然后调用它的
removeAll()
方法# 2 楼答案
您可以记下数组元素相同的所有数组索引(在两个数组中),并在两个列表中重复一个,使用
方法
在不完全遍历两个ArrayList的情况下不要删除,因为删除一个元素时,所有后续元素的数组索引都会更改
否则,如果要在一个循环中执行此操作,则在删除元素时,将循环变量减一,以便两个ArrayList都保持索引关联性
# 3 楼答案
要从另一个集合中的集合中删除所有项,请使用^{}