在循环之前执行isEmpty()或在列表的情况下直接使用循环之间是否有任何区别(for -each)

时间:2013-10-04 14:04:30

标签: java arraylist foreach

让我们拿一个空列表:

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时代我被要求使用第一种方法而不是第二种方法。但即使是 - 如果列表为空,也不会遍历。

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

3 个答案:

答案 0 :(得分:3)

第一种情况不会隐式创建Iterator对象以在for - 每个循环中使用。

你可以说它有“更好的表现”,但我发现它更加丑陋。

Take a look here on how the enhanced for loop is implemented.如果您的列表isEmpty

,您基本上可以避免所有这些

答案 1 :(得分: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();

}

Iterator正在检查元素是否存在,恕我直言避免empty检查。

性能差异几乎可以忽略不计。首选可读代码。

答案 2 :(得分:0)

你问的是List,这是一个界面。答案取决于正在使用的具体实现类。

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

因此,一般来说,更易读的代码与使用isEmpty()检查的代码一样快,但如果性能确实存在问题,那么将会有一些特定于应用程序的情况,您需要使用isEmpty( )。