{{ !articles[0].partner.isSponsoringArticle ? "Platinum" : "Portal" }} Partner

Reasons to call .isEmpty on collections

I’ve seen many times code like the one below:

if (collection.size() > 0) { ... }

There is just something which inherently “clicks” with most programmers minds when they think “non-empty”. There is however a method which is more appropriate in most of the cases: isEmpty:

if (!collection.isEmpty()) { ... }

The top reasons for using isEmpty rather than size would be:

  • it is more expressive (the code is easier to read and to maintain)
  • it is faster, in some cases by orders of magnitude. Two examples from the JDK where this is extremely visible would be the ConcurrentLinkedQueue and NavigableMap / NavigableSet. All of these implement the “size” method by iterating trough the collection and because of this, calling size gets increasingly slower as the number of elements increase

Todays source code performs a comparative benchmark between small (10 element) and large (1 000 000 elements) collections by timing the calls to the size and is empty methods. While benchmarks and especially micro-benchmarks needs be taken with a large grain of salt :-) , these tests show that there is at least a factor of 10x difference in time when calling the size method and there is very little difference when calling the isEmpty method.


From http://www.transylvania-jug.org/archives/140

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks