1

我必须从中删除元素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。需要做什么?

4

5 回答 5

11

Read Remove Common Elements in Two Lists Java


Use below code

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

Or can be done by

arr1.removeAll(arr2)

After SO comments

I used the following code

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);

and getting output as

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

So what is not working at your side?

Read more about How do you remove the overlapping contents of one List from another List?

于 2013-08-21T10:18:40.063 回答
0

Take new arr as final sorted array

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));
    }
    }
于 2013-08-21T10:18:49.677 回答
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);
}
于 2013-08-21T10:30:45.237 回答
0

好吧,把事情说清楚:

如果您的列表由字符串等基本元素组成,您需要做的就是使用

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);

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

于 2014-12-03T11:30:35.110 回答
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);
于 2013-08-21T10:42:52.940 回答