这个问题可能看似微不足道,但我几天都找不到解决这个问题的方法。
摘录1:
for(int i = 0; i < arr.length; i++){
arr[i] = new Bucket();
}
摘录2:
Arrays.fill(arr, new Bucket());
带有代码段1的代码正在按预期执行,但包含代码段2的代码未通过所有测试用例。
我期待这两个陈述在内部做同样的工作。但是测试用例表明它不是。任何帮助澄清这一点都会非常有帮助。
答案 0 :(得分:4)
考虑一下他们做了什么:在循环中,您在每次迭代中创建一个新对象 。在第二步中,您创建一个对象并用它填充数组。他们是完全不同的。
将指定的Object引用分配给指定的Objects数组的每个元素。
答案 1 :(得分:1)
Arrays.fill()
始终使用相同的对象:
public static void fill(Object[] a, Object val) {
for (int i = 0, len = a.length; i < len; i++)
a[i] = val;
}
因此,整个数组将被new Bucket()
答案 2 :(得分:0)
我期待这两个陈述在内部做同样的工作。
Snippet 2仅创建一个Bucket
,并将相同的实例添加到每个插槽。所以它们不一样,在Java 8+中你可以使用lambda和类似
IntStream.range(0, arr.length).forEach(x -> arr[x] = new Bucket());
填写Bucket[] arr
。