理解Collection.isEmpty()和Collection.size()== 0之间的区别?

时间:2014-12-17 12:12:51

标签: java performance collections size is-empty

我读过很多关于isEmpty()size()>之间差异的文章。 0表示检查collection是否为空,发现isEmpty()的性能优于size(),但我无法轻易理解为什么isEmpty()的性能良好,即使内部为isEmpty( )只是大小== 0?

我的问题是:

  1. 任何人都可以轻松解释哪种情况isEmpty()更快,以及何时使用isEmpty()size()函数检查collection是否{{} 1}}或不?

  2. 任何人都可以使用代码或其他方式(图表,图表等)解释这一点,以便任何初学者都能轻松理解吗?

3 个答案:

答案 0 :(得分:7)

可能某些集合只是在size()==0方法中使用isEmpty(),但这并不意味着它们都会这样做。 isEmpty()的默认实现仅检查是否size() == 0,但如果效率更高,则特定集合可以用其他内容覆盖它。

这是一个很好的例子。 ConcurrentSkipListSet documentation说:

  

请注意,与大多数集合不同,size方法不是常量操作。

对于本课程,您当然希望使用isEmpty()而不是size() == 0

(要了解跳过列表的原因,您需要了解跳过列表的工作原理,但如果您想了解更多内容,请回来询问有关它们的其他问题。)

答案 1 :(得分:3)

基本上我找到了 .size()可以是 O(1) O(N),具体取决于data structure; .isEmpty()永远不会 O(N)

答案 2 :(得分:0)

使用 isEmpty 而不是尺寸的主要原因是:

it is more expressive (the code is easier to read and to maintain)

it is faster, in some cases by orders of magnitude.

详细解释here

++ 同一问题here