Javaで配列要素を削除する方法
Javaで配列を作成する際には、そのデータ型とサイズを指定します。JVMはこれを使用して、配列要素に必要なメモリを割り当てます。配列から要素を削除するための特定のメソッドはありません。
1. ループを使用して配列から要素を削除する。
この方法では、新しい配列の作成が必要です。私たちはforループを使用して、削除したい要素を除いた新しい配列を作成することができます。
package com.scdev.java;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
int[] arr_new = new int[arr.length-1];
int j=3;
for(int i=0, k=0;i<arr.length;i++){
if(i!=j){
arr_new[k]=arr[i];
k++;
}
}
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After deletion :" + Arrays.toString(arr_new));
}
}
このコードは、インデックス3の要素を削除します。このメソッドは、単純にインデックス3の要素以外のすべての要素を新しい配列にコピーします。
2.値によって配列要素を削除する。
Alternatively:
2.値を使用して配列の要素を削除する。
前の場合とは異なり、このコードは要素を値に基づいて削除します。これは重複する要素では機能しません。なぜなら、削除後の配列のサイズを知っている必要があるからです。
package com.scdev.java;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
int[] arr_new = new int[arr.length-1];
int j=3;
for(int i=0, k=0;i<arr.length;i++){
if(arr[i]!=j){
arr_new[k]=arr[i];
k++;
}
}
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After deletion :" + Arrays.toString(arr_new));
}
}
これと前のケースとの唯一の違いは、i!=jの代わりにarr[i]!=jがif条件にあることです。
3.重複要素を持つ配列からその値に応じて要素を削除する。
重複の値に基づいた削除を行う場合、ArrayListを使用する必要があります。ArrayListは事前にサイズを指定する必要がないため、動的に拡張することができます。
package com.scdev.java;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,3,3,4,5};
ArrayList<Integer> arr_new = new ArrayList<>();
int j=3;
for(int i=0;i<arr.length;i++){
if(arr[i]!=j){
arr_new.add(arr[i]);
}
}
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After deletion :" +arr_new);
}
}
4. 同じ配列内の要素の移動
この方法は、同じ配列内の要素をシフトすることによって行われます。要素のシフトにより、削除する要素は次のインデックスの要素に置き換えられます。
package com.scdev.java;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,3,3,4,5};
int j=3;
System.out.println("Before deletion :" + Arrays.toString(arr));
int count =0;
for(int i = 0; i < arr.length; i++){
if(arr[i] == j){
count++;
// shifting elements
for(int k = i; k < arr.length - 1; k++){
arr[k] = arr[k+1];
}
i--;
// break;
}
}
System.out.print("After Deletion :" );
for(int i = 0; i < arr.length-count; i++){
System.out.print(" " + arr[i]);
}
System.out.println();
System.out.println("Whole array :" + Arrays.toString(arr));
}
}
カウント変数は削除された要素の数を示します。この変数は、配列が印刷されるべきインデックスまでのトラックを保持するために必要です。このメソッドは重複も管理します。
5. ArrayListから要素を削除する
ArrayListは配列によって支えられています。ArrayListから要素を削除する操作は簡単です。組み込みの関数を呼び出すだけです。
package com.scdev.java;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1,3,3,4,5};
ArrayList<Integer> arr_new = new ArrayList<Integer>();
for (int i : arr)
{
arr_new.add(i);
}
arr_new.remove(3);
System.out.println("Before deletion :" + Arrays.toString(arr));
System.out.println("After Deletion:" + arr_new);
}
}
remove(i)関数の呼び出しは、インデックスiの要素を削除します。ArrayListの場合、配列と比較して削除が比較的簡単です。
結論
異なる方法を使って配列の要素を削除するいくつかの例を見た。配列の要素を削除するときとArrayListの要素を削除するときの違いが明らかになっている。要素の削除を繰り返す場合は、ArrayListを使ってその組み込み関数を活用するべきだ。要素を配列に追加する場合も同様である。ArrayListは動的な性質を持つため、配列の変更をより簡単かつ手間がかからない方法で行うことができる。