我以前做C/C++
int arr[10] = {0};
将我的所有数组元素初始化为0.
Java中是否有类似的快捷方式?
我想避免使用循环,是否可能?
int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
arr[i] = 0;
答案 0 :(得分:519)
每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10)[...]对于类型
int
,默认值为零,即0
。
如果要将数组初始化为其他值,可以使用java.util.Arrays.fill()(当然在内部使用循环)。
答案 1 :(得分:88)
虽然其他答案是正确的(int数组值默认初始化为0),如果你想明确地这样做(例如,如果你想要一个填充值42的数组),你可以使用填充( )Arrays类的方法:
int [] myarray = new int[num_elts];
Arrays.fill(myarray, 42);
或者如果你是1-liners的粉丝,你可以使用Collections.nCopies()
例程:
Integer[] arr = Collections.nCopies(3, 42).toArray(new Integer[0]);
会给arr值:
[42, 42, 42]
(虽然它是Integer
,而不是int
,如果你需要基本类型,你可以按照Apache Commons ArrayUtils.toPrimitive()
例程:
int [] primarr = ArrayUtils.toPrimitive(arr);
答案 2 :(得分:34)
在java中,默认情况下所有元素都初始化为0。你可以保存循环。
答案 3 :(得分:19)
它如何降低应用程序的性能......?阅读以下内容。
在Java语言规范中,任何对象的默认/初始值可以按照以下方式给出。
对于字节类型,默认值为零,即(byte)的值为 0 强>
对于短类型,默认值为零,即(短)的值为 0 强>
对于 int 类型,默认值为零,即 0 。
对于长类型,默认值为零,即 0L 。
对于 float 类型,默认值为正零,即 0.0f 。
对于 double 类型,默认值为正零,即 0.0d 。
对于 char 类型,默认值是 null 字符,即“ \ u0000 ”
对于布尔类型,默认值为 false 。
对于所有引用类型,默认值为 null 。
通过考虑所有这些,您不需要使用数组元素的零值进行初始化,因为默认情况下,对于int数组,所有数组元素都为0。
因为数组是一个容器对象,它包含固定数量的单个类型的值。 现在,您的数组类型为 int ,因此请考虑所有数组元素的默认值自动为0 因为持有int类型。
现在考虑数组 字符串类型,以便所有数组元素默认值为空强>
为什么不这样做??
您可以按照问题中的建议使用循环来指定空值。
int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
arr[i] = 0;
但是,如果你这样做,那将是一个无用的机器周期损失。 如果您在应用程序中使用多个阵列,并且每个阵列都使用它,那么它将会影响应用程序性能达到相当高的水平。
更多使用机器周期 ==&gt; 更多时间来处理数据 ==&gt;输出时间将显着增加。这样您的应用程序数据处理可以被视为低级别(慢速升级到某个级别)。
答案 4 :(得分:15)
您可以保存循环,初始化已经为0.即使对于局部变量。
但为了便于阅读(请认可的最佳做法),请更正放置括号的位置:
int[] arr = new int[10];
答案 5 :(得分:13)
如果您使用的是Float或Integer,则可以像这样分配默认值...
Integer[] data = new Integer[20];
Arrays.fill(data,new Integer(0));
答案 6 :(得分:5)
您可以使用现有的数组大小创建一个新的空数组,并可以将它们分配回您的数组。这可能比其他更快。 Snipet:
package com.array.zero;
public class ArrayZero {
public static void main(String[] args) {
// Your array with data
int[] yourArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//Creating same sized array with 0
int[] tempArray = new int[yourArray.length];
Assigning temp array to replace values by zero [0]
yourArray = tempArray;
//testing the array size and value to be zero
for (int item : yourArray) {
System.out.println(item);
}
}
}
结果:
0
0
0
0
0
0
0
0
0
答案 7 :(得分:1)
是,数组中的int值初始化为零。但你不能保证这一点。 Oracle文档指出这是一种糟糕的编码实践。
答案 8 :(得分:1)
初始化后,int值已经为零,正如大家所提到的那样。如果您确实需要将数组值设置为零并希望对其进行优化,请使用System.arraycopy
:
static private int[] zeros = new float[64];
...
int[] values = ...
if (zeros.length < values.length) zeros = new int[values.length];
System.arraycopy(zeros, 0, values, 0, values.length);
这在大多数或所有JRE实现中使用memcpy
。注意,即使有多个线程,使用像这样的静态也是安全的,因为最坏的情况是多个线程同时重新分配zeros
,这不会伤害任何东西。
您也可以像其他人提到的那样使用Arrays.fill
。 Arrays.fill
可以在智能JVM中使用memcpy
,但可能只是一个Java循环和需要的边界检查。
当然,对您的优化进行基准测试。
答案 9 :(得分:1)
如果为零,则不需要初始化,因为Java中int的默认值为零。
对于非零的值,java.util.Arrays
提供了许多选项,最简单的一种是填充方法。
int[] arr = new int[5];
Arrays.fill(arr, -1);
System.out.println(Arrays.toString(arr)); //[-1, -1, -1, -1, -1 ]
int [] arr = new int[5];
// fill value 1 from index 0, inclusive, to index 3, exclusive
Arrays.fill(arr, 0, 3, -1 )
System.out.println(Arrays.toString(arr)); // [-1, -1, -1, 0, 0]
如果我们要基于条件填充值,我们还可以使用Arrays.setAll():
int[] array = new int[20];
Arrays.setAll(array, p -> p > 10 ? -1 : p);
int[] arr = new int[5];
Arrays.setAll(arr, i -> i);
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
答案 10 :(得分:0)
将数组声明为类中的实例变量,即每个方法中的数据,JVM将其作为默认值。你不用再担心了
答案 11 :(得分:0)
在c / cpp中没有捷径,只能用零下标初始化所有数组。例如:
int arr[10] = {0};
但是在Java中,有一个名为Arrays.fill()的魔术工具,它将使用您选择的整数填充数组中的所有值。例如:
import java.util.Arrays;
public class Main
{
public static void main(String[] args)
{
int ar[] = {2, 2, 1, 8, 3, 2, 2, 4, 2};
Arrays.fill(ar, 10);
System.out.println("Array completely filled" +
" with 10\n" + Arrays.toString(ar));
}
}
答案 12 :(得分:0)
您在问题中正确定义了它,它与 C++ 几乎相同。对于原始数据类型,您需要做的就是初始化数组。默认值为 int 0。
int[] intArray = new int[10];
答案 13 :(得分:-3)
int a=7, b=7 ,c=0,d=0;
int dizi[][]=new int[a][b];
for(int i=0;i<a;i++){
for(int q=d;q<b;q++){
dizi[i][q]=c;
System.out.print(dizi[i][q]);
c++;
}
c-=b+1;
System.out.println();
}
结果 0123456 -1012345 -2-101234 -3-2-10123 -4-3-2-1012 -5-4-3-2-101 -6-5-4-3-2-10