使用Java原生API将LinkedList追加到另一LinkedList尾部的最高效方法
Java 原生LinkedList同类型实例拼接最高效方案
仅使用JDK自带的java.util.LinkedList实现拼接时,优先选择addAll()方法,是官方API提供的最优实现,不需要自行修改链表底层结构。
实现逻辑说明
- 时间复杂度为O(n),n为被拼接列表的元素数量,没有额外的冗余操作
LinkedList的addAll底层做了针对性优化:会先批量获取待拼接集合的所有元素,一次性修改链表首尾节点的指针完成拼接,避免了单次添加元素的重复节点操作开销- 相比循环调用
add()方法逐个插入元素,性能提升30%以上,数据量越大性能优势越明显
代码示例
import java.util.LinkedList; public class MergeLinkedList { public static void main(String[] args) { LinkedList<Integer> listA = new LinkedList<>(); listA.add(1); listA.add(2); LinkedList<Integer> listB = new LinkedList<>(); listB.add(3); listB.add(4); // 场景1:不需要保留原listA的原始内容,直接追加,空间开销最小 listA.addAll(listB); // 输出结果:[1, 2, 3, 4] System.out.println(listA); // 场景2:需要保留两个原列表的内容,创建新列表存储拼接结果 LinkedList<Integer> mergedList = new LinkedList<>(listA); mergedList.addAll(listB); } }
注意事项
- 拼接过程中不要修改被拼接的列表(上述示例的listB),否则会触发
ConcurrentModificationException异常 addAll默认追加到列表末尾,如果需要插入到指定位置,可以调用重载方法addAll(int index, Collection<? extends E> c),指定插入的下标位置即可
内容的提问来源于stack exchange,提问作者user15558176
相关产品推荐
相关产品推荐

