【问题标题】:What is more efficient: new ArrayList() vs clear()+add()? [duplicate]什么更有效:new ArrayList() vs clear()+add()? [复制]
【发布时间】:2014-06-06 13:17:48
【问题描述】:

如果我需要检索一些对象集合(假设它是某个客户端),可以从 DB 中获取。所以有两种可能:

1 在某些类接收器中我会声明如下:

...
 private final List<Client> clients = new ArrayList<Client>();
...
// the fillinng method:
fillClients(){
   dbHelper.getClients(clients);
}

所以 dbHelper 的方法将收到一个可以使用的集合,它不会创建新对象(列表),但它会清除并填充现有对象,例如:

public void getClients(List<Client>clients){
clients.clear();
...
while(cursor.moveToNext())
clients.add(new Client(...));
...
return;
}

另外一种模式是:

...
 private List<Client> clients;
...
// the fillinng method:
fillClients(){
   clients = dbHelper.getClients();
}

所以相应的方法会创建一个新的对象(一个列表):

public List<Client> getClients(){
 List<Client>clients = new ArrayList<Client> clients;
...
while(cursor.moveToNext())
clients.add(new Client(...));
...
return clients;
}

这个问题与一个事实有关,即创建新对象是一项有价值的操作。

【问题讨论】:

  • 为什么不对其进行基准测试并找出答案?需要考虑的一件事:对象分配在 Java 中非常便宜。
  • @Dmitri 但垃圾收集不是。

标签: java performance


【解决方案1】:

实际上,我会小心重用相同的 ArrayList。因为当我们调用 clear() 时,Arraylist 后面的数组不会重新调整大小。

当您使用大量元素而不是创建新对象时,Clear 会很有用,您可以避免数组复制的成本。在其他情况下,只需创建一个新对象。

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 2020-08-11
    • 2014-07-22
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多