【问题标题】:How to initialize all the elements of an array to any specific value in java如何在java中将数组的所有元素初始化为任何特定值
【发布时间】:2012-04-22 03:50:30
【问题描述】:

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

我说的对吗?有没有其他的方法?

【问题讨论】:

    标签: java arrays


    【解决方案1】:

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

    Arrays.fill(array, -1);
    

    [顺便说一下,C 或 C++ 中的 memset 仅对 char 的数组有任何实际用途。]

    【讨论】:

    • 我查看了Arrays.fill()的源代码。它做同样的事情。 public static void fill(int[] a, int val) {for (int i = 0, len = a.length; i &lt; len; i++)a[i] = val;}
    • 是的。应该如此。虽然我怀疑 JIT 可能足够聪明,可以改进基本实现。
    • 我不同意。 memset也可以使用,实际上非常有用,在整数数组中需要填写0-1时,例如在DP问题中。
    • 你能解释一下你所说的便携方式是什么意思吗?
    • 仅供参考:您可以将 memset_pattern4、8 和 16 用于其他整数大小。
    【解决方案2】:

    【讨论】:

    • 能否请您也举个例子?
    【解决方案3】:

    还有

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

    【讨论】:

    • 数组大小未知怎么办?
    【解决方案4】:

    你试过Arrays.fill function吗?

    【讨论】:

    • 不。我以前没用过。
    • 能否请您也举个例子?
    • @Aenadon:参见accepted answer,它显示了 Arrays.fill 函数。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      如果它很短,你可以这样做:

      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。
      【解决方案7】:

      显然你可以使用 Arrays.fill(),不过你的方式也可以。

      【讨论】:

      • 是的。甚至Arrays.fill() 使用索引0size-1for 循环。同样的方式,我做了什么。谢谢你的回答。
      【解决方案8】:

      Java 8 流也可以:

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

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

      【讨论】:

      • 这也适用于非原始类型 (Stream.generate(() -&gt; new Whatever("Hello World", 42)).limit(count).toArray();),因此比 Arrays.fill() 更灵活。不过,正如您所说,不确定效率。
      【解决方案9】:

      使用Java 8,您可以简单地使用ncopiesCollections 类:

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

      你的情况是:

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

      Here是你类似案例的详细回答。

      【讨论】:

        【解决方案10】:

        对于您可以使用的列表

        Collections.fill(arrayList, "-")

        【讨论】:

          【解决方案11】:

          java.utils 中的数组类有一个方法。

          Arrays.fill(your_array, value_to_fill);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-09
            • 2015-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-29
            • 2018-03-17
            • 1970-01-01
            相关资源
            最近更新 更多