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