我需要清除数组列表,哪种方法更好?为什么?
方法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();
}