2012-01-26 4 views
1

私は10要素の配列を持っていると言う。プログラムの別の部分では、インデックス4のアイテムを削除する必要があると判断します。配列から要素を削除する最も効率的な方法を次に、配列のサイズを小さくします

アイテムを削除して配列を短くする最も効率的な方法は何ですか?

私は以下の方法を書いていますが、正しく動作していないようです。たとえば、削除するインデックスが0の場合など、何か不足していますか?このメソッドは、配列とインデックスを送信することによって呼び出され、削除されます。

私は、リストと他のタイプのリストがあることを認識しています。しかし、これはプログラミングコースの割り当てであり、ARRAYを使用しなければならない(MUST)。

//Removes the index from the array and returns the array. 
    NumberTile[] removeAndTrim(NumberTile[] array, int index){ 
     NumberTile[] save = array; 
     array = new NumberTile[save.length-1]; 
     for (int i=0; i<index; i++){ 
      array[i]=save[i]; 
     }//end for loop 
     for (int j=index; j<save.length-1; j++){ 
      array[j]=save[(j+1)]; 
     } 
     return array; 
    }//end removeAndTrim 
+0

これは、 'ArrayList'を使用することで解決される問題であることがわかりました。 –

+0

System.arraycopyがあることも理解していますが、この割り当てには使用できません。 – Tony

+0

はい、私はこの割り当てに配列を使用する必要があります。私はArryListsを使うのが好きです。 – Tony

答えて

2
public NumberTile[] removeAndTrim(NumberTile[] a, int index){ 
    NumberTile[] result = new NumberTile[a.length-1]; 
    for (int i = 0; i < result.length; i++){ 
     result[i] = a[((i < index) ? i : i + 1)]; 
    } 
    return result; 
} 

あなたの最も効率的な方法は、一つのループ/トラバースと1つのアレイの作成次のようになります。あなたの関数は次のように使用する必要があります

注意。
(arraycopyを使用しない場合)

注:これはパラメータ配列の値をまったく変更せず、新しい値を返します。

+0

ありがとう、ありがとう。 – Tony

+1

私は、毎回 'i'の値を確認する必要がなくなるので、2つの分割ループが高速になると思います。 – rtheunissen

3

あなたの方法は、可能な限り最も効率的である、これはあなたがArrayListのかSystem.arraycopyのようにライブラリ、ユーティリティクラスを使用することを許可されていない運動であると仮定します。推論:

  • a)は、あなたがあなたが必要とする既存の
  • を変更することはできませんので、一つの要素短く、b)は、Java配列が固定されているサイズのものを必要とするので、あなたは新しいアレイを構築する避けることができません新しい配列を生成するためにlength-1要素をコピーします。タイトなループでこれを行うことは、純粋なJavaでできることは最速です。

スタイルポイントとして、おそらく新しい配列 "result"を呼び出すか、似たようなものを置き、配列を保存しようとしているのを避けてください。これは無意味です。入力パラメータを変更することはできません。

NumberTile[] newArray=removeAndTrim(oldArray,index); 
+0

私はこれを念頭に置いておきます、ありがとうございます。 – Tony

0
NumberTile[] removeAndTrim(NumberTile[] array, int removeIndex) { 
    NumberTile[] newArray = new NumberTile[array.length - 1]; 
    for (int i = 0; i < removeIndex; i++) { 
     newArray[i] = array[i]; 
    } 
    for (int i = removeIndex + 1; i < array.length - 1; i++) { 
     newArray[i] = array[i + 1]; 
    } 
    return newArray; 
} 
関連する問題