哪一个更好的方法清除arrayList?

时间:2012-07-19 08:01:31

标签: java

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

方法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?

7 个答案:

答案 0 :(得分:7)

第一,尝试使用泛型:

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

由于它现在已初始化,因此无需进行空检查。

现在,如果你需要坚持一个特定的合同,你可以检查列表是否为空,但正如@Puce所说,它是微观优化。

list.clear();

答案 1 :(得分:4)

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

     public void clear() {
         modCount++;

         // Let gc do its work
         for (int i = 0; i < size; i++)
             elementData[i] = null;

         size = 0;
     }

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

答案 2 :(得分:2)

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

public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}

但这是一个非常小的优化,我想你应该在遇到性能问题时才能解决这个问题。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

由于ArrayList是基于数组的,因此您无需检查它是否为空。因此,我最喜欢第一种方法,因为它具有“微观”的高性能

答案 6 :(得分:0)

再次初始化列表。

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

 if(list!=null && !list.isEmpty())
 {
   list = new ArrayList();
 }