检查集合的最佳方法不是null和null条件

Jav*_*ava 5 java collections

我们使用ArrayList,hashmap等集合.

我们检查条件的次数,例如list是否为null.

我们有很多方法来判断我们的集合是否为空.

不同的方法.

1. if(list==null)
2. if(list.size()==0)
3. if(list.isEmpty())
Run Code Online (Sandbox Code Playgroud)

有时我们还需要检查列表是否为空,因此我们通常会通过这些方式进行检查

1. if(list!=null)
2. if(list.size()>0)
3. if(!list.isEmpty()) 
Run Code Online (Sandbox Code Playgroud)

考虑到程序执行的性能,哪个是最佳条件还是需要将这些组合起来?

Sur*_*tta 9

最佳组合将是

if(list!=null && !list.isEmpty()){

        //Yeah ,do something
}
Run Code Online (Sandbox Code Playgroud)

一个用于空检查,然后是否有任何检查

  • 在一个糟糕的世界里,这是最好的检查.在一个美好的世界中,确保列表首先永远不会为空. (5认同)

Sea*_*oyd 6

1. if(list!=null)
Run Code Online (Sandbox Code Playgroud)

你应该确保永远不会这样!

阅读Joshua Bloch撰写的有效Java第2版
第43项:返回空数组或集合,而不是空值

[...]总之,没有理由从数组或集合值方法返回null,而不是返回空数组或集合.空返回惯用语很可能是C编程语言的延续,其中数组长度与实际数组分开返回.在C中,如果返回零作为长度,则分配数组没有任何优势.

简而言之,让你的方法返回Collections.emptyList()而不是null,你有一点不用担心.

2. if(list.size()>0)
3. if(!list.isEmpty()) 
Run Code Online (Sandbox Code Playgroud)

那要看.对于像ArrayList这样的简单集合,它们是等效的.但是,如果您的Collection实际上是数据库查询的实时视图呢?调用size()可能是一个非常昂贵的操作,而isEmpty()将始终是O(1).我会说使用isEmpty().

另见Jon Skeet的回答:https://stackoverflow.com/a/11152624/342852


Mas*_*dul 0

nullMeanslist初始化为 null。null列出sizeisEmpty将抛出NullPointerException. 但是,not nulllist可以为空或者 size==0

(list!=null) != (list.size()==0)
Run Code Online (Sandbox Code Playgroud)

size==0 和 isEmpty 是等价的。

(list.size()==0) ==  list.isEmpty()
Run Code Online (Sandbox Code Playgroud)