AI智能
改变未来

Java集合中,isEmpty()与size()==0的区别

关于集合的处理,Java开发手册有这么一段话:

【强制】判断所有集合内部的元素是否为空,使用 isEmpty()方法,而不是 size()==0 的方式。

说明:在某些集合中,前者的时间复杂度为 O(1),而且可读性更好。

下面我们通过一些源码来看看

HashMap源码

/*** Returns the number of key-value mappings in this map.** @return the number of key-value mappings in this map*/public int size() {return size;}/*** Returns <tt>true</tt> if this map contains no key-value mappings.** @return <tt>true</tt> if this map contains no key-value mappings*/public boolean isEmpty() {return size == 0;}

ConcurrentHashMap源码

/*** {@inheritDoc}*/public int size() {long n = sumCount();return ((n < 0L) ? 0 :(n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE :(int)n);}/*** {@inheritDoc}*/public boolean isEmpty() {return sumCount() <= 0L; // ignore transient negative values}

ConcurrentLinkedQueue源码

/*** Returns {@code true} if this queue contains no elements.** @return {@code true} if this queue contains no elements*/public boolean isEmpty() {return first() == null;}/*** Returns the number of elements in this queue.  If this queue* contains more than {@code Integer.MAX_VALUE} elements, returns* {@code Integer.MAX_VALUE}.** <p>Beware that, unlike in most collections, this method is* <em>NOT</em> a constant-time operation. Because of the* asynchronous nature of these queues, determining the current* number of elements requires an O(n) traversal.* Additionally, if elements are added or removed during execution* of this method, the returned result may be inaccurate.  Thus,* this method is typically not very useful in concurrent* applications.** @return the number of elements in this queue*/public int size() {int count = 0;for (Node<E> p = first(); p != null; p = succ(p))if (p.item != null)// Collection.size() spec says to max outif (++count == Integer.MAX_VALUE)break;return count;}

总结

通过不同源码的对比,isEmpty()方法时间复杂度都是O(1),size()方法时间复杂度不固定,最坏可能是O(N)

————————————————

版权声明:本文为CSDN博主「程序员Forlan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_36433289/article/details/123197934

关于集合的处理,Java开发手册有这么一段话:
【强制】判断所有集合内部的元素是否为空,使用 isEmpty()方法,而不是 size()==0 的方式。
说明:在某些集合中,前者的时间复杂度为 O(1),而且可读性更好。
下面我们通过一些源码来看看
HashMap源码————————————————版权声明:本文为CSDN博主「程序员Forlan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_36433289/article/details/123197934

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Java集合中,isEmpty()与size()==0的区别