相关疑难解决方法(0)

.toArray(new MyClass [0])或.toArray(new MyClass [myList.size()])?

假设我有一个ArrayList

ArrayList<MyClass> myList;
Run Code Online (Sandbox Code Playgroud)

我想打电话给阿瑞,是否有使用性能的原因

MyClass[] arr = myList.toArray(new MyClass[myList.size()]);
Run Code Online (Sandbox Code Playgroud)

过度

MyClass[] arr = myList.toArray(new MyClass[0]);
Run Code Online (Sandbox Code Playgroud)

我更喜欢第二种风格,因为它不那么冗长,我认为编译器会确保空数组不会真正被创建,但我一直想知道这是不是真的.

当然,在99%的情况下,它不会以某种方式产生影响,但我希望在我的普通代码和优化的内部循环之间保持一致的风格......

java performance coding-style

147
推荐指数
4
解决办法
7万
查看次数

传递零大小的数组,保存分配?

The Well-Grounded Java Developer的第114页的代码示例中,最后一行:

Update[] updates = lu.toArray(new Update[0]);
Run Code Online (Sandbox Code Playgroud)

包含注释:传递零大小的数组,保存分配

List<Update> lu = new ArrayList<Update>();
String text = "";
final Update.Builder ub = new Update.Builder();
final Author a = new Author("Tallulah");

for (int i=0; i<256; i++) {
  text = text + "X";
  long now = System.currentTimeMillis();
  lu.add(ub.author(a).updateText(text).createTime(now).build());
  try {
    Thread.sleep(1);
  } catch (InterruptedException e) {
  }
}

Collections.shuffle(lu);
Update[] updates = lu.toArray(new Update[0]);
Run Code Online (Sandbox Code Playgroud)

确切地说,节省了多少分配?

List#toArray(T [] a)的javadoc 提到:

如果列表适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此列表的大小分配新数组.

这就是我记得的:如果传递给的数组toArray(T[] a)不能满足列表中的所有内容,则会分配一个新数组.显然,列表中有256个元素,不能放入大小为0的数组中,因此必须在方法内部分配一个新数组,对吧?

这个说明是不正确的?或者还有什么意思吗?

java arrays garbage-collection

7
推荐指数
1
解决办法
286
查看次数