Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在循环之前检查列表是否为空的最佳方法是什么?_Java_Null_For Loop - Fatal编程技术网

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

Java 在循环之前检查列表是否为空的最佳方法是什么?,java,null,for-loop,Java,Null,For Loop,我知道这是一个原始的问题,但我想学习最聪明的方法 我想在ArrayList intList上循环,它可以为空。我有两种方法 if(intList != null) { for(int i = 0; i < intList.size(); i++){ System.out.println(intList.get(i)); } } if(intList!=null){ 对于(inti=0;i

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

我想在
ArrayList intList
上循环,它可以为空。我有两种方法

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

for(inti=0;intList!=null&&i
第一条路对我来说更漂亮。你怎么认为?在这种情况下,您的实现是什么

对不起,如果是重复的问题,但我找不到


谢谢

在本例中,我也会选择第一个实现,因为它的意图更明确


通常,我会尽量避免
列表
(或者任何其他
集合
对象)为
。当评估
列表时(该列表突然意外地为
null
),您很可能希望在任何处理发生之前中止,这样就不会出现在集合上循环的任何情况。

我更喜欢第一种情况,因为完整的代码段很可能是:

if(intList != null) {
 for(int i = 0; i < intList.size(); i++){
         System.out.println(intList.get(i));
 }
}
else {
   //Do something here.
}
if(intList!=null){
对于(inti=0;i
我优先选择第一个选项,因为我通常使用第一个流程

对我来说,第一个选项更清晰、更容易阅读和理解

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

  • 如果编写了返回列表或数组的函数,则永远不要返回null!如果没有要返回的元素,则返回空列表或空数组
这可以以最小的开销完成,如下所示:

public List<String> getNames() {
    if( !loaded ) {
        return Collections.emptyList();
    }
    ...
}
public List getNames(){
如果(!已加载){
返回集合。emptyList();
}
...
}
如果应用正确,则不必检查空列表。我们不必


编辑:哦,回到你手上的问题:使用forst变量,它更清晰、更快,因为空检查只需执行一次(可能编译器会将其计算出来,但在变量1中你可以确定)根据我的说法,第一个选项应该是首选的,因为它的可读性比第二个好,而第二个选项为您节省了一行额外的代码


一天结束时,两者都将做同样的事情,所以这取决于你们,你们想使用哪种代码。我建议坚持使用first,因为它更易于开发人员阅读。

第一种形式更具可读性,目的更明确


第一种形式也可能更快,因为第二种形式要求在每次循环时测试
intList
不是null。(JIT编译器可能会优化掉不必要的测试…但为什么要依赖它呢。)

+1首先同意更清晰,避免
列表开始时
为空。创建<代码>列表的方法应该考虑返回<代码>集合.EvyTyList](< /代码>),如果可能的话,适当的。第一个是一个普通的简单的习惯用法,而第二个则是不寻常的,因此需要一个额外的时间来让开发者知道它为什么不同。除非你有充分的理由不这样做,否则就选择普通和简单的方法。在“有效Java”(第二版)中的第43项与你的观点一致:“返回空数组或集合,不为空”。你可以通过以下链接阅读关于泛型(第23至29项包括在内)一章的PDF文件:谢谢。如果我在某处找到一个下载版本,我想我会买一个。
public List<String> getNames() {
    if( !loaded ) {
        return Collections.emptyList();
    }
    ...
}