String[] stringArray = new String[100];
Arrays.fill(stringArray, "");
它不会更快,因为它会像您一样迭代数组,但它更方便。
Arrays.fill()代码
public static void fill(Object[] a, int fromIndex, int toIndex, Object val) {
rangeCheck(a.length, fromIndex, toIndex);
for (int i=fromIndex; i<toIndex; i++)
a[i] = val;
}
6条答案
按热度按时间fcy6dtqo1#
使用
Arrays.fill()
它不会更快,因为它会像您一样迭代数组,但它更方便。
Arrays.fill()代码
uwopmtnx2#
由于
String
在Java中的不变性,您的问题有点奇怪。主要的推力表明你正在寻找这个:然而,这实际上并没有给您带来任何好处,因为无论何时您用不同的String替换其中一个数组项,您都必须有效地创建一个新的
String
对象。这意味着创建new String()
的行为是冗余的,因此效率较低。这就引出了一个问题:你为什么要这么做它是为了确保返回一个有效的对象吗?或者数组中的对象实际上是一个
String
?如果是后者,请使用泛型:这解决了相同的问题,并使您从面向对象中获益。如果可以,通常建议您远离原始数组:基于对象的数组更有用,导致更干净的代码和更有效的程序。
如果你使用的是可变类型,并且预填充的目的是确保从数组中检索对象时对象存在,那么处理这个问题的最佳方法是在接收端实际使用异常,原因有二:第一个是在实际需要内存之前不分配内存来保存内存(以及随之而来的所有节省),第二个是没有什么可以阻止数组将元素设置为
null
,所以你必须检查:请注意,虽然异常在捕获实际错误时会带来开销,但在此之前它们没有开销。出于这个原因,您不想将它们用于控制流,但您确实希望(比您可能更多地)使用它们来捕捉没有意义的边缘情况。
avwztpqn3#
这不是更快,但它的代码更少:
9avjhtql4#
所以,你告诉我你想创建一个不同对象的数组。然后必须有一个默认的构造函数或传入的工厂。我将展示第一种情况的代码-当您可以使用
Class<...>.newInstance()
调用空构造函数时:示例用法如下:http://ideone.com/pbTFq9
qcbq4gxm5#
你可以声明像
szqfcxe26#
Java 8 Streams支持用一行构造和初始化SomeClass数组。