2

让我们拿一个空的 List :

List<String> dummyList = new ArrayList<String>();

现在下面两个代码有什么区别:

1. 使用 isEmpty() 方法

if(!dummyList.isEmpty()){
    for(String dummy : dummyList){
        System.out.println("Enhanced for loop for empty list : "+dummy);
    }
}

2. 不使用 isEmpty() 并依赖 for-each

for(String dummy : dummyList){
    System.out.println("Enhanced for loop for empty list : "+dummy);
}

Manu 次我被要求使用第一种方法而不是第二种方法。但是如果列表为空,即使 for-each 也不会遍历。

那么两者之间有什么区别,哪一个更好?

4

3 回答 3

3

第一种情况不会隐式创建要在-each 循环Iterator中使用的对象。for

你可以说它具有“更好的性能”,但我觉得它更丑。

在这里查看增强的 for 循环是如何实现的。如果你的 list ,你基本上是在避免所有这些isEmpty

于 2013-10-04T14:05:06.180 回答
3
for(String dummy : dummyList){
    System.out.println("Enhanced for loop for empty list : "+dummy);
}

转换为

for(Iterator<String> i = dummyList.iterator(); i.hasNext(); ) {
  String element = i.next();

}

迭代器正在检查元素是否不在这里,恕我直言,避免empty检查。

性能差异几乎可以忽略不计。更喜欢可读的代码。

于 2013-10-04T14:08:07.767 回答
0

您在询问 List,它是一个接口。答案将取决于正在使用的特定实现类。

一般来说,我会说迭代器的性能相当不错,但可能存在实现复杂且缓慢的情况,而 isEmpty 的性能可能非常好。

所以一般来说,可读性更高的代码与带有 isEmpty() 检查的代码一样快,但是如果性能确实是一个问题,那么在某些特定于应用程序的情况下,您会想要使用 isEmpty()。

于 2013-10-04T14:57:54.117 回答