配列のすべての要素をJavaの特定の値に初期化する方法


108

ではC/C++、私たちは持っているmemset()私の願いを果たすが、中にできる機能Javaはどのように特定の値にすべての要素を初期化することができますか?を記述するときはいつでもint[] array=new int[10];、これは単純にすべての要素がゼロに等しいサイズ10の配列を初期化します。配列の1つでこの初期化整数を変更したいだけです。つまり、すべての要素がに等しい配列を初期化したいのです-1。それ以外の場合はfor、初期化の直後にループを配置する必要があります。これは、インデックスからインデックス0までの範囲であり、size-1そのループ内で要素をに割り当ててい-1ます。以下は、より理解するためのコードです-

    int[] array = new int[10];
    for (int i = 0; i < size; i++) {
        array[i] = -1;
    }

私は正しいですか?同じための他の方法はありますか?

回答:


212

プリミティブ型の場合は、次のように使用できますArrays.fill()

Arrays.fill(array, -1);

[ ちなみに、memsetCまたはC ++では、の配列を実際に使用するだけですchar]


17
のソースコードを確認しましたArrays.fill()。同じことをします。 public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
Ravi Joshi

2
うん。あるはずです。JITは基本的な実装を改善するのに十分賢いのではないかと思いますが。
Louis Wasserman

1
同意しません。memsetまた、たとえばDPの問題で、0または-1で埋める必要がある整数配列で使用することもできます。
Sнаđошƒаӽ

@Sнаđошƒаӽ-ポータブルではありません。
Oliver Charlesworth

1
参考までに、他の整数サイズにはmemset_pattern4、8、16を使用できます。
geowar 2017年


5

Java 8ストリームでも可能です。

int[] a = IntStream.generate(() -> value).limit(count).toArray();

おそらく、しかし、仕事をするための最も効率的な方法ではありません。


これは非プリミティブ型(Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();)でも機能するため、Arrays.fill()よりも柔軟性があります。しかし、あなたが言うように、効率についてはわかりません。
クリストファーリッチズ2018年

3

短い場合はこれを行うことができます。

int[] array = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

しかし、それはほんの数件以上のものに悪影響を及ぼします。

forループは簡単です:

  int[] myArray = new int[10];
  for (int i = 0; i < array.length; i++)
       myArray[i] = -1;

編集:Arrays.fill()他の人が言及したオプションも気に入っています。


2次元配列を初期化するための規定はありますか?int a [] [] = new int [3] [4]のようなもの; Arrays.fill(a、-1); 12個の要素すべてに-1が設定されるようにします。
PoornaChandra 2017年



0

使用できますArrays.fill(array, -1)


0

明らかに、Arrays.fill()を使用できますが、その方法も機能します。


Y A。でもArrays.fill()使用するforインデックスを持つループ0にしますsize-1。同じように、私がやったこと。お返事ありがとうございます。
Ravi Joshi、

0

Java 8を使用するとncopiesCollectionsクラスを簡単に使用できます。

Object[] arrays = Collections.nCopies(size, object).stream().toArray();

あなたの場合はそれは:

Integer[] arrays = Collections.nCopies(10, Integer.valueOf(1)).stream().toArray(Integer[]::new);
.

ここにあなたの同様のケースの詳細な答えがあります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.