1. ホーム
  2. java

[解決済み] Javaで整数の配列を切り出すには?

2022-02-19 16:03:09

質問内容

Nは配列のサイズになります。

int numArray [] = new numArray[N];

しかし,配列の中身は1から正数Nまでのすべての数を保持することになるので,このforループの後ではサイズNの配列全体が一杯になることはありません.そこで、forループの後に、配列をトリミング(サイズ変更)して、配列の中に空のスロットがなくなるようにしたいのです。

例:

N = 5とする。 つまり、forループの後、1から5までの全ての数字がこのように配列に入ることになる。

int arr[] = new int[N];

int arr[0]=1;
int arr[1]=3;
int arr[2]= null;
int arr[3]= null;
int arr[4]= null;

さて、forループの後にトリミング(リサイズ)をして、nullを保持しているインデックスがなくなり、そして配列になるようにしたいのです。

int arr[0]=1;
int arr[1]=3;

配列のサイズが2になりました。

どのように解決するのですか?

Javaでは、一度作成した配列のサイズを変更することはできません。 しかし、必要なサイズの配列を新たに作成することは可能です。

もう一つ重要な点は、配列を作成する際に プリミティブ : int . プリミティブはオブジェクトではないので、値を代入することはできません。 null をプリミティブに追加します。 の配列を作成する必要があります。 java.lang.Integer を設定したい場合、その中のエントリーを null .

Integer[] numArray = new Integer[N];

というJavaの機能のおかげで オートボックス で動作するほとんどすべてのコードは、プリミティブな int の値も動作します。 Integer の値です。

ステップ

  1. 使用する Integer[] の代わりに int[]
  2. 必要なサイズを計算する(カウントしない null のエントリを削除します)
  3. 必要なサイズの新しい配列を確保する
  4. 古い配列をループし、すべての非をコピーします。 null を新しい配列にコピーします。

コード

Integer[] oldArray = ...;

// Step 2
int count = 0;
for (Integer i : oldArray) {
    if (i != null) {
        count++;
    }
}

// Step 3
Integer[] newArray = new Integer[count];

// Step 4
int index = 0;
for (Integer i : oldArray) {
    if (i != null) {
        newArray[index++] = i;
    }
}