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

138
在C和C++中,我们有memset()函数可以实现我的愿望。但是在Java中,如何将所有元素初始化为特定值呢?每当我们编写int[] array = new int[10]时,这只是简单地初始化一个大小为10的数组,其所有元素均设置为0,但我只想将所有元素初始化为不为0的值(比如-1)。否则,我需要在初始化后紧跟着使用一个for循环,该循环从索引0到索引size−1,并在该循环中将每个元素分配给所需的值,就像这样:
int[] array = new int[10];
for (int i = 0; i < array.length; i++) {
    array[i] = -1;
}

我这样做对吗?还有其他方法吗?

11个回答

263

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

Arrays.fill(array, -1);

[顺便提一下,在C或C++中,memset只对char数组有真正的用途。]


19
我查看了Arrays.fill()的源代码,它执行的是相同的操作。 public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; } - ravi
2
是的。就应该这样。尽管我怀疑JIT可能足够聪明,可以改进基本实现。 - Louis Wasserman
2
我不同意。 memset 也可以用于整数数组,并且实际上在需要填充 0-1 的情况下非常有用,例如在 DP 问题中。 - Sнаđошƒаӽ
1
你能解释一下“可移植方式”是什么意思吗? - Sнаđошƒаӽ
2
只是提醒:您可以使用memset_pattern4、8和16来处理其他整数大小。 - geowar
显示剩余4条评论

32

还有一种方法

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

21
数组大小未知怎么办? - Abhishek kumar

8

使用Java 8流也是可能的:

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

也许这不是最有效的方法,但它可以完成工作。

3
这个方法也适用于非原始类型(Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();),因此比Arrays.fill()更加灵活。不过效率方面就不太清楚了,正如你所说的。 - Christopher Riches

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

2

请问您能否举个例子,展示一下这个是什么样子的? - techfly

1

不,我以前没有使用过它。 - ravi
请问您能否举个例子,展示一下这个是什么样子的? - techfly
@Aenadon:请查看被接受的答案,其中展示了Arrays.fill函数。 - Sam Goldberg

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

1
Java.utils中的Arrays类有一个相应的方法可以实现这个功能。
Arrays.fill(your_array, value_to_fill);

1
使用Java 8,您可以简单地使用Collections类的ncopies
Object[] arrays = Collections.nCopies(size, object).stream().toArray();

在您的情况下,它将是:


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

这里有一个类似情况的详细答案。


0

对于列表,您可以使用

Collections.fill(arrayList,“-”)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接