如何将数组的所有元素初始化为java中的任何特定值

Rav*_*shi 102 java arrays

C/C++我们有memset()功能,可以实现我的愿望,但我Java如何能够将所有元素初始化为特定值?每当我们写入时int[] array=new int[10];,这只是初始化一个大小为10的数组,所有元素都等于零.我只想为我的一个数组更改这个初始化整数.即我想初始化一个所有元素都相等的数组-1.否则我必须for在初始化之后放置一个循环,其范围从索引0到索引size-1以及在循环内部,我正在分配元素-1.以下是更多理解的代码 -

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

我是否正确?还有其他方法吗?

Oli*_*rth 198

如果它是原始类型,您可以使用Arrays.fill():

Arrays.fill(array, -1);
Run Code Online (Sandbox Code Playgroud)

[ 顺便提一下,memset在C或C++中只有任何实际用途的数组char.]

  • 我检查了`Arrays.fill()`的源代码.它做同样的事情.`public static void fill(int [] a,int val){``for(int i = 0,len = a.length; i <len; i ++)``a [i] = val;``}` (16认同)
  • 是的.应该如此.虽然我怀疑JIT可能足够聪明,可以改进基本实现. (2认同)
  • 我不同意。`memset` 也可以使用,而且实际上非常有用,当你需要用 `0` 或 `-1` 填充整数数组时,例如在 DP 问题中。 (2认同)
  • 仅供参考:您可以将 memset_pattern4、8 和 16 用于其他整数大小。 (2认同)

Gil*_*anc 31

还有

int[] array = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
Run Code Online (Sandbox Code Playgroud)

  • 如果数组的大小未知,该怎么办? (10认同)
  • 高效,bug难读,难以维护 (2认同)

Ale*_*xey 7

也可以使用 Java 8 流:

int[] a = IntStream.generate(() -> value).limit(count).toArray();
Run Code Online (Sandbox Code Playgroud)

然而,这可能不是完成这项工作的最有效方式。

  • 这也适用于非原始类型(`Stream.generate(() -&gt; new Whatever("Hello World", 42)).limit(count).toArray();`),因此比数组更灵活。填()。不过,正如你所说,不确定效率。 (2认同)