在循环之前检查列表是否为空的最佳方法是什么?

时间:2011-03-29 05:47:05

标签: java null for-loop

我知道这是一个原始问题,但我想学习最聪明的方法。

我想循环遍历ArrayList<Integer> intList,它可以为null。我有2种方法可以做到这一点

if(intList != null) {
     for(int i = 0; i < intList.size(); i++){
             System.out.println(intList.get(i));
     }
}

for (int i = 0; intList != null && i < intList.size(); i++){
     System.out.println(intList.get(i));
}

第一种方式对我来说似乎更漂亮。你怎么看?在那种情况下你的实施是什么?

不好意思,如果是重复的问题,但我找不到一个

由于

7 个答案:

答案 0 :(得分:4)

在这种情况下,我会选择第一个实现,因为它的意图更清晰。

通常,我会尽量避免List(或任何其他Collection对象,真的)null。在评估List(突然且意外地null)时,您可能希望在进行任何处理之前中止,因此不会发生循环收集的任何情况。

答案 1 :(得分:2)

我更喜欢第一个,因为完整的代码段最有可能是:

if(intList != null) {
 for(int i = 0; i < intList.size(); i++){
         System.out.println(intList.get(i));
 }
}
else {
   //Do something here.
}

答案 2 :(得分:2)

我们公司有一条发展规则:

  • 如果编写的函数返回列表或数组,永远不会返回null !如果没有要返回的元素,则返回空列表或空数组。

这可以用最小的开销来完成,比如这里:

public List<String> getNames() {
    if( !loaded ) {
        return Collections.emptyList();
    }
    ...
}

如果应用得当,您不必检查空列表。我们没有。

编辑:哦,回到你手边的问题:使用forst变体,它更清晰,更快,因为null检查只需要进行一次(可能无论如何,编译器将其排除在外,但在变体1中,您可以肯定)。

答案 3 :(得分:0)

我更喜欢第一个,因为我主要使用第一个过程

答案 4 :(得分:0)

对我而言,第一个选项更清晰,更易于阅读和理解。

答案 5 :(得分:0)

根据我的说法,第一个选项应该是首选,因为它的可读性优于第二个选项,而第二个选项为你节省了一行额外的代码。

一天结束时两个人都会做同样的事情,所以由你决定,你想要使用哪些代码。我建议先坚持一下,因为它具有可读性,因此更适合开发人员。

答案 6 :(得分:0)

第一种形式更具可读性 - 意图更清晰。

第一种形式可能也会更快,因为第二种形式表示每次绕过循环时测试intList不是空 。 (JIT编译器可以优化掉不必要的测试......但为什么要依赖它。)