我必须从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。 需要做什么?
答案 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);
它将根据所需属性(在基于电话号码的示例中)比较项目,并将按计划运行。