创建一个包含相同值/对象的n个副本的数组?

时间:2013-01-11 10:46:20

标签: java arrays copy

我想在数组中的每个索引处创建一个大小为n的数组,其值相同。在Java中执行此操作的最佳方法是什么?

例如,如果n为5且值为布尔false,则数组应为:

= [false, false, false, false, false]

7 个答案:

答案 0 :(得分:16)

List<Integer> copies = Collections.nCopies(copiesCount, value);

javadoc here

这比'Arrays.fill&#39;更好。解决方案有几个原因:

  1. 它很好,很顺利,
  2. 它消耗更少的内存(请参阅source code),这对于大量副本或要复制的大型对象非常重要,
  3. 它创建了一个不可变列表,
  4. 它可以创建非基本类型的对象的副本列表。应该谨慎使用,因为元素本身不会重复,get()方法将为每个索引返回相同的值。为复制提供不可变对象或确保它不会被更改更好。
  5. 列表比数组更酷:)但是如果你真的非常想要一个数组 - 那么你可以做到以下几点:

    Integer[] copies = Collections.nCopies(copiesCount, value)
                                  .toArray(new Integer[copiesCount]);
    

答案 1 :(得分:11)

您可以尝试使用:

boolean[] array = new boolean[5];
Arrays.fill(array, false);

手动数组填充的第二种方法:

boolean[] array = new boolean[] {false, false, false, false, false};

答案 2 :(得分:4)

Arrays.fill()将使用相同的值填充现有数组。原语和Objects存在变体。

答案 3 :(得分:3)

对于该具体示例,没有任何内容,默认情况下boolean[]将初始化为[false, false, ...]

如果要使用非默认值初始化数组,则需要循环或使用为您执行循环的Arrays.fill

答案 4 :(得分:1)

或者您可以以低级方式进行。用n个元素组成一个数组,并遍历放置相同元素的所有元素。

int[] array = new int[n];

for (int i = 0; i < n; i++)
{
    array[i] = 5;
}

答案 5 :(得分:0)

Arrays.fill(...)正是您要找的。

答案 6 :(得分:-1)

试试这个..

 Boolean [] data = new Boolean[20];
  Arrays.fill(data,new Boolean(false));