配列には固定長の要素があるため、基本的に特定の要素を削除して長さを減らすことはできません。 新しい配列を作成する必要がありますが、どのように実装するのかを見てみましょう。
1. Listを使用して配列から要素を削除する
リストは、可変的に長さを変更できるデータ構造です。配列をリストに変更した後に要素を削除し、リストを配列に変更する方法があります。
次の例では、 remove()
は配列をリストに変更し、引数として渡されたIndexを削除します。そしてリストを配列に変更して返します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Example {
private static String[] remove(String[] arr, int index) {
if (arr == null || index < 0 || index >= arr.length) {
return arr;
}
List<String> result = new ArrayList<>(Arrays.asList(arr));
result.remove(index);
return result.toArray(new String[0]);
}
public static void main(String[] args) {
String[] arr = {"a", "b", "c", "d", "e"};
arr = remove(arr, 3);
System.out.println(Arrays.toString(arr));
}
}
Output:
[a, b, c, e]
2. System.arraycopy() を使用して配列から要素を削除する
System.arraycopy(srcArr, srcPos, destArr, destPos, length)
は srcArr の destArr にコピーしますが、 srcArr の srcPos からコピーを開始します。コピーされる場所はdestArrのdestPos Indexからです。コピーする長さはlengthで引数を渡すだけです。
System.arraycopy() の詳細な API の使用方法は、Java - 配列コピー (deep copy) を参照してください。
System.arraycopy()
を 2 回使うと、削除したい Index を除いてすべての要素をコピーできます。
たとえば、配列のサイズが5で、Index 3の要素を削除すると、Index 0から2までを新しい配列のIndex 0から2にコピーできます。
そして、Index 4から5までの要素を新しい配列のIndex 3から4までコピーできます。これにより、Index 3が削除された長さ4の配列を作成できます。
import java.util.Arrays;
public class Example1 {
private static String[] remove(String[] arr, int index) {
if (arr == null || index < 0 || index >= arr.length) {
return arr;
}
String[] result = new String[arr.length - 1];
System.arraycopy(arr, 0, result, 0, index);
System.arraycopy(arr, index + 1, result, index, arr.length - index - 1);
return result;
}
public static void main(String[] args) {
String[] arr = {"a", "b", "c", "d", "e"};
arr = remove(arr, 3);
System.out.println(Arrays.toString(arr));
}
}
Output:
[a, b, c, e]
3. for文を使用して配列から要素を削除する
2番と同じ方法ですが、特定の要素を除いた残りをすべて新しい配列にコピーする方法です。
代わりに System.arraycopy()
のようなライブラリを使わずに for 文を使って直接削除する要素を除いて残りの要素をコピーしました。
import java.util.Arrays;
public class Example2 {
private static String[] remove(String[] arr, int index) {
if (arr == null || index < 0 || index >= arr.length) {
return arr;
}
String[] result = new String[arr.length - 1];
int copyIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (i == index) {
continue;
}
result[copyIndex++] = arr[i];
}
return result;
}
public static void main(String[] args) {
String[] arr = {"a", "b", "c", "d", "e"};
arr = remove(arr, 3);
System.out.println(Arrays.toString(arr));
}
}
Output:
[a, b, c, e]
Related Posts
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法