2011-12-15 24 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; 
    } 
} 

どのように私は私のArrayList<ArrayList>

答えて

20

ArrayListからnew ArrayTest(1)でオブジェクトを削除することができますが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; 
} 
7

オブジェクトは、インデックス(remove(int))によって物体(remove(Object))によって、ArrayList(又は一般的に任意List)から二つの方法で除去することができます。

この特定のシナリオでは、クラスにequals(Object)メソッドを追加します。これにより、ArrayList.remove(Object)は正しいオブジェクトを識別できます。

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

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

+0

私はあなたのポイントを理解できなかった場合私は許してください。しかし、あなたはインデックスを提供する必要はありません、あなたはオブジェクトをindexOfメソッドに渡す必要があり、オブジェクトインデックスを返し、メソッドを削除するとArrayListからこのインデックスが削除されます。同じ値を持つオブジェクトが重複している場合は、クラスにequalsメソッドを実装する必要があります。 –

+0

しかし「は、このコード 最後のオブジェクト – sanu

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

プロパティに一致する複数のオブジェクトを削除するとどうなりますか? – tmh

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

これはしかし実装.equalsを持っているArrayTestオブジェクトを必要とします。また、リストをソートするにはCollections.sortを呼び出す必要があります。最後に、ArrayTestはComparableインターフェースを実装しなければならないので、binarySearchは正しく実行されます。

これはJavaで行う「適切な」方法です。素早く汚れた方法で問題を解決しようとしているのであれば、要素を繰り返し処理して、探している属性の要素を取り除くことができます。

0

これは、私を助け:

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

代わりの

theDeck.remove(numberNeededRemoved); 

私は、コードの最初のスニペットに除去立体構造と第二のアン除去立体構造を得ました。

私はあなたの問題だと思う最初のスニペットでコードを切り替えてみてください。

Nathan Nelson

0

特定のオブジェクトをarrayListから削除するには、2通りの方法があります。 arrayListの関数を呼び出します。

  1. オブジェクトに基づいて削除します。
arrayList.remove(object); 

これは、あなたのオブジェクトを削除しますが、ArrayListのがUserDefinedのデータ型の項目が含まれている場合、ほとんどの場合、このメソッドはあなたに正しい結果を与えるものではありません。 Primitive DataTypesの場合のみ正常に動作します。ユーザはオブジェクトフィールドの値に基づいてアイテムを削除したいので、自動的にremove関数で比較することはできません。

  1. arrayListの指定されたインデックス位置に基づいて削除します。 arrayListから項目またはオブジェクトを削除する最善の方法。最初に、削除するアイテムのインデックスを見つけます。このarrayListメソッドを呼び出すと、このメソッドはインデックスベースで項目を削除します。そしてそれは正しい結果を与えるでしょう。
arrayList.remove(index); 
0

は、Java 8を使用している場合:

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

のJava 8は、コレクションインタフェースにremoveIf方法があります。 ArrayListには、高度な実装(nの順序)があります。