3

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

方法1:

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

if(list!=null)
{
  list.clear();
}

方法二:

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

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

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

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

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

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

4

7 回答 7

7

第一,尝试使用泛型:

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

由于它现在已初始化,因此不需要空检查。

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

list.clear();
于 2012-07-19T08:06:03.097 回答
4

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

     public void clear() {
         modCount++;

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

         size = 0;
     }

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

于 2012-07-19T08:07:05.437 回答
2

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

public void clear() {
    modCount++;

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

    size = 0;
}

但这只是一个很小的优化,我想只有在遇到性能问题时才应该注意这一点。

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

于 2012-07-19T08:07:55.743 回答
2

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

于 2012-07-19T08:07:59.340 回答
1

这取决于如何clear()实施。这顶多是一个微优化,所以我建议不要花太多时间去想这个。

于 2012-07-19T08:04:20.587 回答
1

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

于 2012-07-19T08:07:03.730 回答
0

再次初始化列表。

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

 if(list!=null && !list.isEmpty())
 {
   list = new ArrayList();
 }   
于 2012-07-19T08:04:53.663 回答