有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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中的某些方法

谢谢


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    您可以记下数组元素相同的所有数组索引(在两个数组中),并在两个列表中重复一个,使用

    items.remove(index);
    

    方法

    在不完全遍历两个ArrayList的情况下不要删除,因为删除一个元素时,所有后续元素的数组索引都会更改

    否则,如果要在一个循环中执行此操作,则在删除元素时,将循环变量减一,以便两个ArrayList都保持索引关联性

  3. # 3 楼答案

    要从另一个集合中的集合中删除所有项,请使用^{}

    items.removeAll(addedItems);