如何从 Java 中的 ArrayList 中删除特定对象?

IT小君   2021-10-29T20:21:00

如何从 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;
    }
}

我怎样才能new ArrayTest(1)从我的ArrayList<ArrayList>

评论(18)
IT小君

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;
}
2021-10-29T20:21:00   回复
IT小君

如果您使用的是 Java 8:

test.removeIf(t -> t.i == 1);

Java 8removeIf在集合接口中有一个方法。对于 ArrayList,它具有高级实现(n 阶)。

2021-10-29T20:21:01   回复
IT小君

一般来说,一个对象可以通过两种方式从一个ArrayList(或通常是 any List)中删除,通过索引 ( remove(int)) 和通过对象 ( remove(Object))。

在此特定场景中:equals(Object)向您的ArrayTest添加一个方法这将允许ArrayList.remove(Object)识别正确的对象。

2021-10-29T20:21:01   回复
IT小君

要从 arrayList 中删除特定对象,有两种方法。调用arrayList的函数。

  1. 根据对象删除。
arrayList.remove(object);

这将删除您的对象,但在大多数情况下,当 arrayList 包含 UserDefined DataTypes 的项目时,此方法不会为您提供正确的结果。它仅适用于原始数据类型。因为用户想根据对象字段值删除项目,而删除功能无法自动比较。

  1. 根据arrayList 的指定索引位置进行删除。从 arrayList 中删除任何项目或对象的最佳方法。首先,找到要删除的项目的索引。然后调用这个arrayList 方法,这个方法在索引的基础上删除项目。它会给出正确的结果。
arrayList.remove(index);  
2021-10-29T20:21:01   回复
IT小君

使用此代码

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.
2021-10-29T20:21:01   回复
IT小君

这是完整的例子。我们必须使用 迭代器的 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 + "]";
    }

}

工作演示屏幕

2021-10-29T20:21:02   回复
IT小君
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();
    }
}
2021-10-29T20:21:02   回复
IT小君
 private List<Employee> list = new ArrayList<>();
 list.removeIf(emp -> emp.getId() == 10);
2021-10-29T20:21:02   回复
IT小君

阿瓦尔切夫是对的。更快的解决方案是解析所有元素并按唯一属性进行比较。

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

}

这是一个快速的解决方案。对于较大的项目,您最好实现对象比较。

2021-10-29T20:21:03   回复
IT小君

如果要删除与该属性匹配的多个对象,请尝试此操作。

我使用以下代码从它帮助我的对象数组中删除元素。

通常,可以通过两种方式从ArrayList(或通常任何列表)中删除对象,通过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();
   }
}
2021-10-29T20:21:03   回复
IT小君

我试过这个,它对我有用:

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;
    }
}
2021-10-29T20:21:04   回复
IT小君
    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);

您可以指定如何控制每个对象。

2021-10-29T20:21:04   回复
IT小君

您可以使用 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 中执行此操作的“正确”方法。如果您只是想以一种快速而肮脏的方式解决问题,那么您可以遍历元素并删除具有您正在寻找的属性的元素。

2021-10-29T20:21:04   回复
IT小君

这帮助了我:

        card temperaryCardFour = theDeck.get(theDeck.size() - 1);
        theDeck.remove(temperaryCardFour);    

代替

theDeck.remove(numberNeededRemoved);

我在第一个代码片段上得到了一个删除构象,在第二个代码片段上得到了一个未删除构象。

尝试使用第一个片段切换您的代码,我认为这是您的问题。

内森·纳尔逊

2021-10-29T20:21:05   回复
IT小君

简单使用 remove() 函数。并将对象作为您要删除的参数传递。你的arraylist.remove(obj)

2021-10-29T20:21:05   回复
IT小君

或者你可以使用 java 8 lambda

test.removeIf(i -> i==2);

它将简单地删除所有满足条件的对象

2021-10-29T20:21:05   回复
IT小君

当从测试 ArrayList 中删除 ArrayTest(1) 时使用下面的一个

test.removeIf(
     (intValue) -> {
         boolean remove = false;
         remove = (intValue == 1);
         if (remove) {
            //Success
         }
         return remove;
      });
2021-10-29T20:21:05   回复
IT小君

简单字符串列表中的示例,如果有人想要:

 public ArrayList<String> listAfterRemoved(ArrayList<String> arrayList, String toRemove) {

        for (int i = 0; i < arrayList.size(); i++) {
            if (arrayList.get(i).equals(toRemove)) {
                arrayList.remove(toRemove);
            }
        }
        return arrayList;
    }

电话是:

ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("1");
        arrayList.add("2");
        arrayList.add("3");
        arrayList.add("4");

        System.out.println("Array List before: " + arrayList.toString());
        arrayList = listAfterRemoved(arrayList, "2");
        System.out.println("Array List after : " + arrayList.toString());

在此处输入图片说明

2021-10-29T20:21:06   回复