[英]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.