0

変数の配列があり、要素の 1 つを削除してから、配列全体を下にシフトして、削除された場所を埋めたいと考えています。どんな助けでも大歓迎です、そしてあなたが尋ねる前に、いいえ、これは宿題ではありません.

4

4 に答える 4

2

理想的には、ArrayList代わりに(または他のリスト実装)を使用してください。これはすでに実装されています。(使用する正確な実装は、削除を実行する必要がある頻度と、インデックスによって取得または設定する必要がある頻度などによって異なります。より多くのコンテキストで、より多くのことを支援できます。)

それ以外の場合は、を使用しますSystem.arraycopy

System.arraycopy(array, index + 1, array, index, array.length - index - 1);
// Assuming it's a reference type array: null out the last element so it
// doesn't prevent garbage collection
array[array.length - 1] = null;
于 2012-04-27T05:23:03.367 に答える
0

最善の解決策は、ArrayList

        ArrayList<String> list = new ArrayList<String>();

        //add Elements
        list.add("test1");
        list.add("test2");
        list.add("test3");

        //remove Element 2 (->1)
        list.remove(1);

        //print Element 2
        System.out.println(list.get(1));
        //output: test3

あなたが本当に私たちに配列をしたいのなら:

    private void removeElement(String[] array, int index) {
    final int arrayLength = array.length;
    for (int i = index + 1; i < arrayLength; i++) {
        if (i > 0) {
            array[i - 1] = array[i];

            if (i == arrayLength - 1) {
                array[i] = "";
            }
        }
    }
}
于 2012-04-27T05:33:14.377 に答える
0

アレイでこれを行うと、特にアレイの縮小を提供する必要がある場合は効率的ではありません。

  • 縮小する必要がない場合は、最後まですべての要素を交換するだけです。
  • 縮小する必要がある場合、唯一のオプションは、新しい配列を割り当てて、すべての要素をコピーすることです。

このタスクのより良いオプションはですLinkedList。任意の要素を削除する操作を提供し、コレクションを修正するためにシフトする必要はありません。

于 2012-04-27T05:23:52.540 に答える
0

可能な解決策は、Arrays.asListおよびList#toArrayメソッドを使用して配列を一時的に に変換し、Listの利用可能なremoveメソッドを使用Listして、配列に戻すことです。

Object[] arrayToShrink = ...;
List<Object> shrinkedList = new ArrayList<Object>( Arrays.asList( arrayToShrink ) );
shrinkedList.remove( objectToRemove );
Object[] shrinkedArray = shrinkedList.toArray( new Object[shrinkedList.size()] );

短いコードですが、おそらく最も効率的なソリューションではありません。

于 2012-04-27T06:02:15.640 に答える