2011-12-15 103 views
13

如何从ArrayList中删除特定的对象? 假设我有如下的类:如何从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; 
    } 
} 

如何删除对象与new ArrayTest(1)基于该equals(Object obj)方法我ArrayList<ArrayList>

回答

20

ArrayList删除对象。所以你应该正确实施这个方法。类似:

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

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

+0

但我怎么能得到ArrayTest的对象与以前相同......... – sanu 2011-12-15 13:31:21

0

使用此代码

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. 
+0

如果有位置不规则然后如何获得obj的索引。 – sanu 2011-12-15 13:32:44

+0

如果我不明白你的观点,请原谅我。但你不需要提供索引,你需要将对象传递给indexOf方法,它将返回对象索引,remove方法将从ArrayList中删除此索引。如果你有重复的对象具有相同的值,那么你需要在你的类中实现equals方法。 – 2011-12-15 13:37:18

0

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

} 

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

0

您可以使用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.Object%29

这就要求ArrayTest中的对象有,虽然实现的.equals。您还需要调用Collections.sort对列表进行排序。最后,ArrayTest必须实现Comparable接口,这样binarySearch才能正常运行。

这是在Java中使用它的“正确”方法。如果您只是想快速和肮脏地解决问题,那么您可以遍历元素并删除具有您要查找的属性的元素。

0

帮我:的

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

代替

theDeck.remove(numberNeededRemoved); 

我得到了第一个代码片段,并在第二的未拆除构象的去除构象。

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

Nathan Nelson

0

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

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

这将删除你的对象,但在大多数情况下,当ArrayList包含用户自定义数据类型的项目,这种方法不会给你正确的结果。它只适用于原始数据类型。因为用户想要根据对象字段值去除项目并且不能通过自动删除功能进行比较。

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

如果您使用的是Java 8:

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

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

相关问题