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


108

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;
    }

我会正确吗?还有其他方法吗?

Answers:


212

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

Arrays.fill(array, -1);

[ 顺便说一下,memset在C或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; }
拉维·乔希

2
是的 应该的。尽管我怀疑JIT可能足够聪明,可以改进基本实现。
Louis Wasserman

1
我不同意。memset当您需要用0或填充整数数组时-1,例如在DP问题中,也可以使用整数数组,并且实际上非常有用。
2016年

@Sнаđошƒаӽ-不是便携式的。
奥利弗查尔斯沃思

1
仅供参考:您可以将memset_pattern4、8和16用于其他整数大小。
geowar's


5

Java 8流也有可能:

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

但是,可能不是最有效的方法。


这也适用于非原始类型(Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();),因此比Arrays.fill()更灵活。正如您所说,不确定效率。
克里斯托弗·里奇斯

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()别人提到的选项。


是否有初始化二维数组的规定?类似int a [] [] = new int [3] [4]; Arrays.fill(a,-1); 这样所有12个元素都将设置为-1。
PoornaChandra



0

您可以使用Arrays.fill(array, -1)


0

显然,您可以使用Arrays.fill(),但完成方式也可以。


嗯 甚至Arrays.fill()使用for索引0为的循环size-1。同样,我做了什么。谢谢您的回答。
拉维·乔希

0

使用Java 8,您可以简单地使用ncopies以下Collections类:

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

在您的情况下,它将是:

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

是您类似情况的详细答案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.