我知道这是一个原始问题,但我想学习最聪明的方法。
我想循环遍历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));
}
第一种方式对我来说似乎更漂亮。你怎么看?在那种情况下你的实施是什么?
不好意思,如果是重复的问题,但我找不到一个
由于
答案 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)
我们公司有一条发展规则:
这可以用最小的开销来完成,比如这里:
public List<String> getNames() {
if( !loaded ) {
return Collections.emptyList();
}
...
}
如果应用得当,您不必检查空列表。我们没有。
编辑:哦,回到你手边的问题:使用forst变体,它更清晰,更快,因为null检查只需要进行一次(可能无论如何,编译器将其排除在外,但在变体1中,您可以肯定)。
答案 3 :(得分:0)
我更喜欢第一个,因为我主要使用第一个过程
答案 4 :(得分:0)
对我而言,第一个选项更清晰,更易于阅读和理解。
答案 5 :(得分:0)
根据我的说法,第一个选项应该是首选,因为它的可读性优于第二个选项,而第二个选项为你节省了一行额外的代码。
一天结束时两个人都会做同样的事情,所以由你决定,你想要使用哪些代码。我建议先坚持一下,因为它具有可读性,因此更适合开发人员。
答案 6 :(得分:0)
第一种形式更具可读性 - 意图更清晰。
第一种形式可能也会更快,因为第二种形式表示每次绕过循环时测试intList
不是空 。 (JIT编译器可以优化掉不必要的测试......但为什么要依赖它。)