6

Java で ArrayList を使用する場合、理解できないことがいくつかあります。ここに私の初期化コードがあります:

 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 boolean (Object object)

Java しかし、それはどのように違いを生むのでしょうか? メソッドポインタはありますか?これを行うためのあいまいでない方法はありますか?

どうもありがとう、私の英語でごめんなさい。

PS: ようやく SparseIntArray を使用したと言わざるを得ませんが、不思議なことに

4

4 に答える 4

12

ステイター向け。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)));
于 2013-02-27T16:29:19.717 に答える
2

Integer ArrayListのremove()メソッドのあいまいさが気になる場合は、ArrayListを拡張して独自の実装を行うことができます。

public class MyIntArrayList extends ArrayList<Integer> {

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

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

}
于 2013-02-27T16:43:02.617 に答える
2

Java にあいまいさがある場合 (コンパイル時に複数のメソッド シグネチャがパラメーターの型と一致する場合)、キャストを使用して正しいメソッドを選択することが唯一の選択肢です。もちろん、実際の呼び出しの前にパラメーターを正しいタイプのローカル変数にキャストして保存することもできますが、これは読者にとって明確にはなりません-私の意見では、パラメーターを使用する場所に直接キャストすることが最良のオプションです.どのメソッドが呼び出されるかを明確にするため。

ちなみに、この場合のAPIがあいまいな理由は、APIが作成された時点でAuto-Boxingがなかったため、そもそもこのようなあいまいなコードを書くことができなかったからです。ただし、明確にするためにメソッドを変更すると、破壊的な変更になります。ほとんどの場合、ArrayList に Integer を格納することはそれほど素晴らしいアイデアではないため、彼らは私たちにそのわずかな煩わしさを許容することにしました。

于 2013-02-27T16:36:46.713 に答える
0

list.remove(new Integer(0))確実にオブジェクトを削除するために使用できます

于 2013-02-27T16:44:39.480 に答える