2016-04-09 17 views
1

私は、指定されたインデックスの要素を削除したいプリミティブ型の配列を持っています。それを行うための正確かつ効率的な方法は何ですか?プリミティブ配列から要素を削除する

私は

long[] longArr = {9,8,7,6,5}; 
int index = 1; 

List list = new ArrayList(Arrays.asList(longArr)); 
list.remove(index); 
longArr = list.toArray(); // getting compiler error Object[] can't be converted to long[] 

以下に述べるように、要素を削除するために探していますが、上記のアプローチは、プリミティブを持つ唯一のオブジェクトではないとして動作するように見えます。

これに代わる方法はありますか?私は/追加のライブラリ

おかげ

あなたは新しい配列を作成し、要素をコピーする必要が
+0

リストを 'List'の代わりに' List 'として宣言してみてください。 – Sam

+0

already triedリスト list = new ArrayList (Arrays.asList(longArr))。 "ArrayList(List )のための適切なコンストラクタが見つかりません"というコンパイラエラーが発生しています –

+0

も参照してくださいhttp://stackoverflow.com/questions/12029515/convert-long-to-long-primitive-java – Sam

答えて

5

を第三者が使用することはできません。例えば

public long[] removeElement(long[] in, int pos) { 
    if (pos < 0 || pos >= in.length) { 
     throw new ArrayIndexOutOfBoundsException(pos); 
    } 
    long[] res = new long[in.length - 1]; 
    System.arraycopy(in, 0, res, 0, pos); 
    if (pos < in.length - 1) { 
     System.arraycopy(in, pos + 1, res, pos, in.length - pos - 1); 
    } 
    return res; 
} 

はNB:このような何か上記のデバッグ/テストされていません....

また、ループに使用してコピーを行うことができますが、arraycopyが速く、この場合でなければなりません。

org.apache.commons.lang.ArrayUtils.remove(long[], int)メソッドは、おそらく上記のコードのように動作します。その方法を使用することは、サードパーティのオープンソースライブラリの使用を避ける必要がない場合には望ましいことです。 (知っている/発見するための@Srikanth Nakkaの名誉)

リストを使用することができない理由は、リストには参照タイプの要素タイプが必要なためです。

+0

thanks..looks good –

0

org.apache.commons.lang.ArrayUtilsを使用してください。

long[] longArr = {9,8,7,6,5}; 
int index = 1; 
longArr=ArrayUtils.remove(longArr, index); 
関連する問題