让我们拿一个空列表:
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时代我被要求使用第一种方法而不是第二种方法。但即使是 - 如果列表为空,也不会遍历。
那么两者之间有什么区别,哪一个更好?
答案 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( )。