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

Kam*_*iya 9 java size collections performance is-empty

我已经阅读了很多关于isEmpty()size()0 之间的区别的文章,对于检查是否collection为空或者没有,并且发现isEmpty()有性能size()但我无法理解为什么性能isEmpty()良好即使内部isEmpty()只有size == 0?

我的问题是:

  1. 任何人都可以轻松解释哪种情况isEmpty()更快,以及何时使用isEmpty()size()功能检查是否collectionempty

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

chi*_*ity 8

可能有些集合只是size()==0在他们的isEmpty()方法中使用,但这并不意味着他们都这样做.默认实现isEmpty()只是检查是否size() == 0,但是如果它更有效,特定集合可以用其他东西来覆盖它.

这是一个很好的例子.该ConcurrentSkipListSet文件说:

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

对于这门课程,你当然希望使用isEmpty()而不是size() == 0.

(要理解为什么跳过列表是正确的,你需要阅读跳过列表的工作原理,但如果你想了解更多信息,请回来再问一些关于它们的问题.)

  • LinkedList的size()实现不会遍历列表,而是在修改列表时跟踪大小. (2认同)

Bha*_*odi 5

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

  • AbstractCollection : `public boolean isEmpty() { return size() == 0; }`。这意味着 size() 和 isEmpty() 在所有主要集合中具有相同的复杂性 (2认同)