哪一种方法更适合清除arrayList



我需要清除数组列表,哪种方法更好?为什么?

方法1:

List list = new ArrayList();
list.add("ram");
if(list!=null)
{
  list.clear();
}

方法2:

List list = new ArrayList();
list.add("ram");
if(list!=null && !list.isEmpty())
{
  list.clear();
}   

在方法1中,我不检查列表是否为空,直接我已经清除了列表。

但在方法2中,如果列表不是空的,我已经通过检查清除了列表

if(list!=null && !list.isEmpty())

哪种方法更好?方法1还是方法2?

第一,尝试使用泛型:

List<String> list = new ArrayList<String>();
list.add("ram");

由于它现在已经初始化,所以不需要进行null检查。

现在,如果有一个特定的合同你需要维护,你可以检查列表是否不是空的,但正如@Puce所说,这是微观优化。

list.clear();

这取决于实现,例如ArrayList(这是其clear方法的代码):

     public void clear() {
         modCount++;
         // Let gc do its work
         for (int i = 0; i < size; i++)
             elementData[i] = null;
         size = 0;
     }

意味着如果列表已经为空,则代码不会花费更多时间。从这个意义上讲,我只想像第一种方法那样清除代码。

对于clear()的源代码,它不检查集合是否为空。

public void clear() {
    modCount++;
    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
}

但这是一个非常小的优化,我想只有当你有性能问题时,你才应该注意这一点。

你可以使用这两个版本,无论如何,如果列表不是空的,你想清除它,如果列表是空的,那么clear()方法会很快执行,所以…不要麻烦

这没关系。clear()与对照isEmpty()的检查的开销是1行代码,即modcount++;

这取决于clear()的实现方式。这最多是一个微观优化,所以我建议不要花太多时间思考这个问题。

由于ArrayList是基于数组的,因此不需要检查它是否为空。因此,我喜欢第一种方法,因为它具有"微型"高性能

再次初始化列表。

List list = new ArrayList();
 list.add("ram");
 if(list!=null && !list.isEmpty())
 {
   list = new ArrayList();
 }   

最新更新