从ArrayList中删除元素

时间:2013-08-21 10:15:17

标签: java arraylist

我必须从ArrayList删除元素,但我还没有完成它。我必须删除的元素也可以在ArrayList中找到。简而言之,我必须从另一个数组列表中删除一个数组列表。例如假设

ArrayList<String> arr1= new ArrayList<String>();
ArrayList<String> arr2 = new ArrayList<String>();
arr1.add("1"); 
arr1.add("2"); 
arr1.add("3"); 

arr2.add("2"); 
arr2.add("4"); 

现在,我必须从arr1中删除arr2中的元素。所以,我的最终答案是1和3。 需要做什么?

5 个答案:

答案 0 :(得分:11)

阅读Remove Common Elements in Two Lists Java


使用以下代码

List<String> resultArrayList = new ArrayList<String>(arr1);
resultArrayList.removeAll(arr2);

或者可以通过

完成
arr1.removeAll(arr2)

在SO评论之后

我使用了以下代码

ArrayList<String> arr1= new ArrayList<String>();
        ArrayList<String> arr2 = new ArrayList<String>();
        arr1.add("1"); 
        arr1.add("2"); 
        arr1.add("3"); 

        arr2.add("2"); 
        arr2.add("4"); 

        System.out.println("Before removing---");
        System.out.println("Array1 : " + arr1);
        System.out.println("Array2 : " + arr2);
        System.out.println("Removing common ---");
        List<String> resultArrayList = new ArrayList<String>(arr1);
        resultArrayList.removeAll(arr2);                
        System.out.println(resultArrayList);

将输出设为

Before removing---
Array1 : [1, 2, 3]
Array2 : [2, 4]
Removing common ---
[1, 3]

那么什么不适合你?

详细了解How do you remove the overlapping contents of one List from another List?

答案 1 :(得分:0)

将新arr作为最终排序数组

for(int i=0;i<arr1.size();i++)
    {
    for(int j=0;j<arr2.size();j++)
    if(!arr1.get(i).contains(arr2.get(j)))
    {
    arr.add(arr1.get(i));
    }
    }

答案 2 :(得分:0)

您可以使用removeAll()函数

/**
 * Removes from this list all of its elements that are contained in the
 * specified collection.
 *
 * @param c collection containing elements to be removed from this list
 * @return {@code true} if this list changed as a result of the call
 * @throws ClassCastException if the class of an element of this list
 *         is incompatible with the specified collection
 * (<a href="Collection.html#optional-restrictions">optional</a>)
 * @throws NullPointerException if this list contains a null element and the
 *         specified collection does not permit null elements
 * (<a href="Collection.html#optional-restrictions">optional</a>),
 *         or if the specified collection is null
 * @see Collection#contains(Object)
 */
public boolean removeAll(Collection<?> c) {
    return batchRemove(c, false);
}

答案 3 :(得分:0)

要删除其他人的副本,请使用此

    int arr1Size = arr2.size();
    int arr2Size = arr2.size();
    for (int i = 0; i < arr1Size; i++)
    {
        for (int j = 0; j < arr2Size; j++)
        {
            if (arr1.get(i).contains(arr2.get(j)))
            {
                arr1.remove(i);
            }
        }
    }
    System.out.print(arr1);

答案 4 :(得分:0)

好的说清楚:

如果您的列表由基本元素组成,如String等 你需要做的只是使用

list2.removeAll(list1);

假设不是这种情况意味着您从custum对象创建了一个列表 - 上述方法不起作用,这是由于项目比较的性质。 它使用object.equals方法,该方法默认检查这是否与另一个列表中的对象的实例相同(可能不是这样)

所以为了使它能够工作,你需要覆盖自定义对象equals方法。

示例 - 根据电话号码测试2个联系人是否相同:

public boolean equals(Object o) 
    {
        if (o==null)
        {
            return false;
        }

        if (o.getClass()!=this.getClass())
        {
            return false;
        }

        Contact c=(Contact)o;
        if (c.get_phoneNumber().equals(get_phoneNumber()))
        {
            return true;    
        }

        return false;
    }

现在使用

list2.removeAll(list1);

它将根据所需属性(在基于电话号码的示例中)比较项目,并将按计划运行。