Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 效率更高的是:新ArrayList()与clear()的对比&x2B;添加()?_Java_Performance - Fatal编程技术网

Java 效率更高的是:新ArrayList()与clear()的对比&x2B;添加()?

Java 效率更高的是:新ArrayList()与clear()的对比&x2B;添加()?,java,performance,Java,Performance,如果我需要检索一些对象集合(假设它是某个客户机),让我们假设从数据库中检索。因此有两种可能性: 1在某些类别中,我要声明如下: ... private final List<Client> clients = new ArrayList<Client>(); ... // the fillinng method: fillClients(){ dbHelper.getClients(clients); } 。。。 private final List clien

如果我需要检索一些对象集合(假设它是某个客户机),让我们假设从数据库中检索。因此有两种可能性:

1在某些类别中,我要声明如下:

...
 private final List<Client> clients = new ArrayList<Client>();
...
// the fillinng method:
fillClients(){
   dbHelper.getClients(clients);
}
。。。
private final List clients=new ArrayList();
...
//填充方法:
填写客户(){
dbHelper.getClients(clients);
}
因此,dbHelper的方法将收到一个随时可用的集合,它不会创建新对象(列表),但会清除并填充现有对象,如:

public void getClients(List<Client>clients){
clients.clear();
...
while(cursor.moveToNext())
clients.add(new Client(...));
...
return;
}
public void getClients(Listclients){
clients.clear();
...
while(cursor.moveToNext())
客户。添加(新客户(…);
...
返回;
}
另一种模式是:

...
 private List<Client> clients;
...
// the fillinng method:
fillClients(){
   clients = dbHelper.getClients();
}
。。。
私人名单客户;
...
//填充方法:
填写客户(){
clients=dbHelper.getClients();
}
因此,相应的方法将创建一个新对象(列表):

public List getClients(){
Listclients=新的ArrayList客户端;
...
while(cursor.moveToNext())
客户。添加(新客户(…);
...
返回客户;
}

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

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


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

为什么不对其进行基准测试并找出答案?需要考虑的一点是:对象分配在Java中非常便宜。@Dmitri但垃圾收集却不是。
public List<Client> getClients(){
 List<Client>clients = new ArrayList<Client> clients;
...
while(cursor.moveToNext())
clients.add(new Client(...));
...
return clients;
}