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

如何从ArrayList中删除特定对象? 假设我有一个如下课程:

import java.util.ArrayList; public class ArrayTest { int i; public static void main(String args[]){ ArrayList test=new ArrayList(); 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删除具有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 oi == this.i; } 

通常,可以通过索引( remove(int) )和object( remove(Object) )以两种方式从ArrayList (或通常任何List )中remove(Object)

在此特定方案中:向ArrayTest类添加equals(Object)方法。 这将允许ArrayList.remove(Object)标识正确的对象。

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

  1. 在对象的基础上删除。
 arrayList.remove(object); 

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

  1. 根据arrayList的指定索引位置删除。 从arrayList中删除任何项目或对象的最佳方法。 首先,找到要删除的项目的索引。 然后调用此arrayList方法,此方法基于索引删除项目。 它会给出正确的结果。
 arrayList.remove(index); 

如果您使用的是Java 8:

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

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

AValchev是对的。 更快的解决方案是解析所有元素并通过唯一属性进行比较。

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

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

使用此代码

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

这对我有所帮助:

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

代替

 theDeck.remove(numberNeededRemoved); 

我在第一段代码上获得了删除构造,在第二段代码中获得了删除构造。

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

内森尼尔森

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

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

通常,可以通过index (remove(int))和object (remove(Object))以两种方式从ArrayList (或通常任何List)中删除对象。

使用这些行的arrayList.remove(index)arrayList.remove(obj.get(index))某些时候可能无法使用以下代码。

 for (Iterator iter = detailInboxArray.iterator(); iter.hasNext(); ) { DetailInbox element = iter.next(); if (element.isSelected()) { iter.remove(); } } 
 List list = new ArrayList(); for (Iterator 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(); } } 

这是完整的例子。 我们必须使用Iterator的remove()方法

 import java.util.ArrayList; import java.util.Iterator; public class ArrayTest { int i; public static void main(String args[]) { ArrayList test = new ArrayList(); 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 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 + "]"; } } 

工作演示屏幕