为何创建ArrayList并添加1000万元素的速度比LinkedList更快?
Java 17下ArrayList与LinkedList尾部插入性能测试分析
- 测试基础条件:Java 17 运行环境,测试场景为反复创建
ArrayList、LinkedList实例,分别向两类集合执行10000000次尾部元素插入操作 - 预期与实际的差异:按照LinkedList的链表结构特性,尾部插入仅需创建新节点、调整相邻节点指针,理论性能应该优于需要定期扩容、执行数组全量拷贝的ArrayList。但实际测试结果完全相反,ArrayList的插入效率远高于LinkedList
- 核心原因:
System.arraycopy()这类JDK内置的原生函数执行效率远高于预期,这类函数直接调用底层内存拷贝能力,跳过了Java层的大量对象操作开销。对比LinkedList每次插入都需要创建新的Node对象、处理对象元数据、维护节点指针关联的开销,批量内存拷贝的整体成本要低得多 - 实测LinkedList优势场景:仅在合并两个LinkedList的场景下,LinkedList的性能表现优于ArrayList,该场景下LinkedList仅需修改头尾节点指针即可完成合并,无需像ArrayList一样申请大容量新数组、执行全量元素拷贝
内容的提问来源于stack exchange,提问作者user14978390
相关产品推荐
相关产品推荐

