繁体   English   中英

从ArrayList中删除元素

[英]Remove elements from 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。需要做什么?

阅读Java两个列表中的Remove Common Elements


使用以下代码

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]

那么什么在您身边不起作用?

了解有关如何从另一个列表中删除一个列表的重叠内容的更多信息

将新的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));
    }
    }

您可以使用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);
}

要从另一个删除重复项,请使用此

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

可以澄清一下:

如果您的列表是由基本元素(例如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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM