Java中List判空:size()==0与isEmpty()哪个性能更优?
Java中判断List为空的两种方法:
isEmpty() vs size() == 0性能差异 性能核心对比
对于JDK标准库中的List实现(如ArrayList、LinkedList),两者在绝大多数场景下性能几乎无差别,但isEmpty()在语义和兼容性上更优。
分实现细节拆解
ArrayList
isEmpty()的源码逻辑:直接判断内部维护的size字段是否为0:public boolean isEmpty() { return size == 0; }size()则是直接返回size字段:
所以public int size() { return size; }size() == 0只是多了一步“返回值与0比较”的CPU微指令操作,性能损耗可以忽略不计,本质上和isEmpty()等价。
LinkedList
- Java 6及更早版本:
LinkedList未维护size字段,size()需要遍历整个链表统计元素数量,此时size() == 0的时间复杂度为O(n),而isEmpty()仅需判断头节点是否为null(O(1)),性能差距极大。 - Java 7及以后:
LinkedList新增了size字段,size()直接返回该值,此时size() == 0和isEmpty()的性能完全一致,都是O(1)操作。
额外考量:语义与兼容性
- 语义清晰度:
isEmpty()直接表达“判断集合是否为空”的意图,比size() == 0更易读,代码维护性更好。 - 非标准List实现:如果使用自定义
List或第三方库的实现,size()可能需要复杂计算(比如实时统计元素数量),这时isEmpty()通常会更高效——因为它不需要计算完整的元素个数,只需判断是否存在至少一个元素即可。
内容的提问来源于stack exchange,提问作者Dilan Madurapperuma
相关产品推荐
相关产品推荐

