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