Java集合中,isEmpty()与size()==0的区别(时间复杂度)。

在进行集合判空时,能用Collection.isEmpty(testList)的就不要用testList.size(),isEmpty不仅可以判断集合是否为null,在时间复杂度上也更优秀。

sonar规范这样描述:
Collection.isEmpty() should be used to test for emptiness
Using Collection.size() to test for emptiness works, but using Collection.isEmpty() makes the code more readable and can be more performant. The time complexity of any isEmpty() method implementation should be O(1) whereas some implementations of size() can be O(n).

也就是说,Collection的实现不同,那么size()方法的时间复杂度也是不同的。

对于ArrayList、LinkedList,size()与isEmpty()的时间复杂度都是O(1) ,代码如下:

Java集合中,isEmpty()与size()==0的区别(时间复杂度)。_第1张图片

但是当Collection的实现类为ConcurrentLinkedQueue(或者NavigableMap、NavigableSet),我们可以看到,size()是将所有元素重新统计了一遍的,故时间复杂度为 O(n),代码如下:

Java集合中,isEmpty()与size()==0的区别(时间复杂度)。_第2张图片

你可能感兴趣的:(Java,java,spring,boot)