我读过很多关于isEmpty()
和size()
>之间差异的文章。 0表示检查collection
是否为空,发现isEmpty()
的性能优于size()
,但我无法轻易理解为什么isEmpty()
的性能良好,即使内部为isEmpty( )只是大小== 0?
我的问题是:
任何人都可以轻松解释哪种情况isEmpty()
更快,以及何时使用isEmpty()
和size()
函数检查collection
是否{{} 1}}或不?
任何人都可以使用代码或其他方式(图表,图表等)解释这一点,以便任何初学者都能轻松理解吗?
答案 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)