2011-12-15 141 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)。

相關問題