我们检查条件的次数,例如列表是否为空。
首先,null
集合和空集合是不同的东西。如果你需要测试一个集合是否是null
你需要一个不同的测试,如果你试图测试集合是否为空。
其次,如果一个集合可能是或者是null
空的(根据您的应用程序设计,它们“意味着”相同的东西),那么您的设计就有问题。你应该最有可能代表......无论你试图代表什么......一种方式,而不是一种/两种方式。
第三,通常最好使用空集合而不是 a null
,因为您可以统一对待空集合和非空集合。相比之下,anull
总是需要作为特殊情况处理。(如果你忘记处理这个null
案子,那么你就有可能NullPointerExceptions
。)
话说回来 ...
哪个是最好的条件,或者我们是否需要考虑程序执行的性能对这些条件进行某种组合?
如果你真的需要处理 a 的情况null
,那么你别无选择,只能测试null
.
对于isEmpty()
与size() == 0
:
后者取决于集合类型的实现:具体来说,取决于size()
方法是否需要对集合元素进行计数。(我不认为任何标准集合类都具有此属性,但这并不是说您不会找到具有此属性的类...)
所以最优谓词很可能是:
c != null && !c.isEmpty()
或者
!c.isEmpty()
取决于您是否(真的)需要满足空值。
显而易见的推论是,如果您不使用null
来表示空集合,您的应用程序可能会更高效......以及更简单和更健壮...... (如果您需要不可变的空集合对象,您可以从类定义的方法/静态中免费获取它们Collections
。)