[英]Remove object from Arraylist Java, only working in specific scenarios
[英]How to remove specific object from ArrayList in Java?
如何从 ArrayList 中删除特定对象? 假设我有一个类如下:
import java.util.ArrayList;
public class ArrayTest {
int i;
public static void main(String args[]){
ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
ArrayTest obj;
obj=new ArrayTest(1);
test.add(obj);
obj=new ArrayTest(2);
test.add(obj);
obj=new ArrayTest(3);
test.add(obj);
}
public ArrayTest(int i){
this.i=i;
}
}
如何从我的ArrayList<ArrayList>
删除带有new ArrayTest(1)
对象
ArrayList
基于equals(Object obj)
方法删除对象。 所以你应该正确地实现这个方法。 就像是:
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj == this) return true;
if (!(obj instanceof ArrayTest)) return false;
ArrayTest o = (ArrayTest) obj;
return o.i == this.i;
}
要么
public boolean equals(Object obj) {
if (obj instanceof ArrayTest) {
ArrayTest o = (ArrayTest) obj;
return o.i == this.i;
}
return false;
}
如果您使用的是 Java 8:
test.removeIf(t -> t.i == 1);
Java 8 在集合接口中有一个removeIf
方法。 对于 ArrayList,它具有高级实现(n 阶)。
通常,可以通过两种方式从ArrayList
(或通常任何List
)中remove(int)
对象,通过索引( remove(int)
)和通过对象( remove(Object)
)。
在此特定场景中:将equals(Object)
方法添加到ArrayTest
类。 这将允许ArrayList.remove(Object)
识别正确的对象。
要从 arrayList 中删除特定对象,有两种方法。 调用arrayList的函数。
arrayList.remove(object);
这将删除您的对象,但在大多数情况下,当 arrayList 包含 UserDefined DataTypes 的项目时,此方法不会为您提供正确的结果。 它仅适用于原始数据类型。 因为用户想根据对象字段值删除项目,而删除功能无法自动比较。
arrayList.remove(index);
这是完整的例子。 我们必须使用迭代器的 remove()方法
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayTest {
int i;
public static void main(String args[]) {
ArrayList<ArrayTest> test = new ArrayList<ArrayTest>();
ArrayTest obj;
obj = new ArrayTest(1);
test.add(obj);
obj = new ArrayTest(2);
test.add(obj);
obj = new ArrayTest(3);
test.add(obj);
System.out.println("Before removing size is " + test.size() + " And Element are : " + test);
Iterator<ArrayTest> itr = test.iterator();
while (itr.hasNext()) {
ArrayTest number = itr.next();
if (number.i == 1) {
itr.remove();
}
}
System.out.println("After removing size is " + test.size() + " And Element are :" + test);
}
public ArrayTest(int i) {
this.i = i;
}
@Override
public String toString() {
return "ArrayTest [i=" + i + "]";
}
}
使用此代码
test.remove(test.indexOf(obj));
test is your ArrayList and obj is the Object, first you find the index of obj in ArrayList and then you remove it from the ArrayList.
List<Object> list = new ArrayList();
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
Object obj= iterator.next();
if (obj.getId().equals("1")) {
// Remove the current element from the iterator and the list.
iterator.remove();
}
}
如果要删除与该属性匹配的多个对象,请尝试此操作。
我使用以下代码从它帮助我的对象数组中删除元素。
通常,可以通过两种方式从ArrayList
(或通常任何 List)中删除object
,通过index
(remove(int)) 和通过object
(remove(Object))。
一些时间使用这些行arrayList.remove(index)
或arrayList.remove(obj.get(index))
可能不起作用尝试使用以下代码。
for (Iterator<DetailInbox> iter = detailInboxArray.iterator(); iter.hasNext(); ) {
DetailInbox element = iter.next();
if (element.isSelected()) {
iter.remove();
}
}
我试过这个,它对我有用:
ArrayList<cartItem> cartItems= new ArrayList<>();
//filling the cartItems
cartItem ci=new cartItem(itemcode,itemQuantity);//the one I want to remove
Iterator<cartItem> itr =cartItems.iterator();
while (itr.hasNext()){
cartItem ci_itr=itr.next();
if (ci_itr.getClass() == ci.getClass()){
itr.remove();
return;
}
}
阿瓦尔切夫是对的。 更快的解决方案是解析所有元素并按唯一属性进行比较。
String property = "property to delete";
for(int j = 0; j < i.size(); j++)
{
Student obj = i.get(j);
if(obj.getProperty().equals(property)){
//found, delete.
i.remove(j);
break;
}
}
这是一个快速的解决方案。 对于较大的项目,您最好实现对象比较。
这帮助了我:
card temperaryCardFour = theDeck.get(theDeck.size() - 1);
theDeck.remove(temperaryCardFour);
代替
theDeck.remove(numberNeededRemoved);
我在第一个代码片段上得到了一个删除构象,在第二个代码片段上得到了一个未删除构象。
尝试使用第一个片段切换您的代码,我认为这是您的问题。
内森·纳尔逊
简单使用 remove() 函数。 并将对象作为您要删除的参数传递。 你的arraylist.remove(obj)
或者你可以使用 java 8 lambda
test.removeIf(i -> i==2);
它将简单地删除所有满足条件的对象
当从测试 ArrayList 中删除 ArrayTest(1) 时使用下面的一个
test.removeIf(
(intValue) -> {
boolean remove = false;
remove = (intValue == 1);
if (remove) {
//Success
}
return remove;
});
private List<Employee> list = new ArrayList<>();
list.removeIf(emp -> emp.getId() == 10);
ArrayTest obj=new ArrayTest(1);
test.add(obj);
ArrayTest obj1=new ArrayTest(2);
test.add(obj1);
ArrayTest obj2=new ArrayTest(3);
test.add(obj2);
test.remove(object of ArrayTest);
您可以指定如何控制每个对象。
您可以使用 Collections.binarySearch 来查找元素,然后在返回的索引上调用 remove。
请参阅此处的 Collections.binarySearch 文档: http : //docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#binarySearch%28java.util.List,%20java.lang。对象%29
这将需要 ArrayTest 对象实现 .equals 。 您还需要调用 Collections.sort 来对列表进行排序。 最后,ArrayTest 必须实现 Comparable 接口,这样 binarySearch 才能正确运行。
这是在 Java 中执行此操作的“正确”方法。 如果您只是想以一种快速而肮脏的方式解决问题,那么您可以遍历元素并删除具有您正在寻找的属性的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.