You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:57:36