截至Java-8,
setAll方法有四种变体,使用提供的生成函数计算每个元素来设置指定数组的所有元素。
其中只有三种重载接受声明为原语类型的数组。
该方法将指定数组中的所有元素设置为由提供的生成器函数生成的值。其中,参数array是要设置的数组,参数generator是一个函数,它接受一个整数参数并返回一个double类型的值,用于生成数组的新值。
(注:该文本为HTML代码,无法直接翻译,已保留原文)
以下是如何使用上述方法的示例:
double [] doubles = new double[50];
Arrays.setAll(doubles, index -> 30D);
int [] ints = new int[50];
Arrays.setAll(ints, index -> 60);
long [] longs = new long[50];
Arrays.setAll(longs, index -> 90L);
setAll
方法提供的函数接收元素索引并返回该索引的值。
你可能会想到字符数组怎么办?
这就是第四个重载的setAll
方法发挥作用的地方。由于没有消耗字符原语数组的重载,我们唯一的选择是将字符数组的声明更改为类型Character[]
。
如果将数组类型更改为Character
不合适,则可以退回到Arrays.fill方法。
使用Character[]
的setAll
方法的示例:
// given an index, set the element at the specified index with the provided value
Character[] character = new Character[50];
Arrays.setAll(characters, index -> '+');
虽然使用
Arrays.fill
方法比
setAll
方法更简单,但如果要设置特定值,则使用
setAll
方法有优势。
setAll
方法的优点是可以将数组的所有元素设置为相同的值,或生成一个偶数、奇数或任何其他公式的数组:
例如:
int[] evenNumbers = new int[10];
Arrays.setAll(evenNumbers, i -> i * 2);
此外,parallelSetAll 方法还有几种重载形式,可以并行执行,但需要注意传递给 parallelSetAll 方法的函数必须是没有副作用的。
结论
如果您的目标仅是为数组的每个元素设置特定值,则使用 Arrays.fill
重载选项是最合适的选择。但是,如果您想要更灵活或按需生成元素,则使用 Arrays.setAll
或 Arrays.parallelSetAll
(在适当情况下)将是更好的选择。
char
替换为'•'
,这意味着它必须尽可能响应。你可能会问,为什么不在进行索引时设置每个值?这是为了与drawString
一起使用,以便可以反走样•
的文本。fill
看起来效果不错。 :) - rtheunissen