2013-02-27 11 views
5

JavaでArrayListを使用すると、わからないことがいくつかあります。ここに私の初期化コードは次のとおりです。ArrayList <Integer> get/removeメソッド付き

ArrayList<Integer> list = new ArrayList <Integer>(); 
list.add (0); 
list.add (1); 

時々私はそのインデックスでオブジェクトを削除する必要があります:

list.remove (0) // delete the object in the first box 

が、時々私は、その内容によってオブジェクトを削除する:

list.remove (0) // delete the object HAS Which value of 0 

このコードは非常にあいまいです。私はコードでそれを何をしたいのか明確にするために、私はこのようなタイプを指定します。

list.remove ((Object) 0) // delete the object which has a value of 0 

私はACない場合は、メソッドが呼び出されるかを知るための唯一の方法はに方法にマウスポインタを置くことです参照してください: java.util.ArrayList.removeブール値(オブジェクトオブジェクト)

Javaしかし、どのように違いがありますか? メソッドポインタはありますか? これを実行するあいまいな方法はありませんか?

ありがとう、私の英語のために申し訳ありません。

PS:私は、私は最終的にSparseIntArrayを使用したことを言う必要がありますが、私はstatersについて不思議

答えて

8

ています。 List#remove(index)は、リストから削除されたオブジェクトを返します。 List#remove(Object)はブール値を返します。

ただし、この特殊なケースでは。あなたはすることができます。

ArrayList<Integer> list = new ArrayList <Integer>(); 
     list.add (0); 
     list.add (1); 
     System.out.println(list.remove(new Integer(0))); 
+0

はい私はこれに気付きました。私が戻り値を使用しない場合、Javaがどのように違いを生み出すか、オートボクシングの仕組みが不思議です。 –

+0

@juliendumortierこれは、この特定のシナリオでは紛らわしいだけです。オブジェクトの場合は一般的にそれについて考えるなら、それは好きです。 'list.remove(animal)'または 'list.remove(watever)'のいずれかです。 – PermGenError

+0

okありがとう!最後の質問。 System.out.println(list。remove((Integer)0); これは良い/悪い習慣ですか? (これにより、新しいインスタンスの作成を避けることができます)。 –

2

(複数のメソッドのシグネチャは、コンパイル時でパラメータの種類と一致する可能性)は、Javaでの曖昧さがあるたびに、右の方法を選択するためにキャストを使用すると、あなたの唯一の選択肢です。もちろん、実際の呼び出しの前にパラメータをローカル変数にキャストすることもできますが、これは読者にとっては明白ではありません。パラメータが直接使用される場所をキャストするのが最良の選択肢です。私の意見では、が呼び出されます。

ところでAPIがこのようにあいまいである理由はAPIが作成された時点ではオートボクシングがなかったため、最初は曖昧なコードを書くことができませんでした。しかし、それを明確にするためにメソッドを変更することは、大きな変化でした。 Integrityをarraylistに格納することは、とにかく大したことではないので、私たちはそのわずかな煩わしさで生きることにしました。それはあなたを悩ませている整数のArrayList内のremove()メソッドを持つだけで曖昧である場合

1

、あなたが実装するためのArrayListを拡張することができ、あなた自身:あなたは確かにオブジェクトを削除するlist.remove(new Integer(0))を使用することができ

public class MyIntArrayList extends ArrayList<Integer> { 

    boolean removeByObject(Integer intObj) { 
     return super.remove(intObj); 
    } 

    Integer removeByIndex(int index) { 
     return super.remove(index); 
    } 

} 
関連する問題