什么更有效:新的ArrayList()vs clear()+ add()?

时间:2014-06-06 13:17:49

标签: java performance

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

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

...
 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;
}

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

1 个答案:

答案 0 :(得分:0)

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

使用大量元素时,清除非常有用,而不是创建新对象,这样可以避免阵列复制的成本。在其他情况下,只需创建一个新对象。