最近在项目里看到很多的saveBatch(LinkedList)用法,以前一直都是用的ArrayList,从来没想过用LinkedList。所以探究下两种List在saveBatch下效率有什么区别

业务代码

private static void test() {
    LinkedList<Entity> list = new LinkedList<>();
    for (int i = 0; i < count; i++) {
        list.add(new Entity());
    }
    saveBatch(list);
}

先看下saveBatch在mybatisplus中是什么执行逻辑
在这里插入图片描述
使用的增强for循环
在这里插入图片描述
增强for循环运行时使用的迭代器
那么问题就变成了ArrayList和LinkedList的add和迭代器效率问题

先看ArrayLis
在这里插入图片描述
插入是O(1),涉及扩容
在这里插入图片描述
迭代是O(n)

再看LinkedList
在这里插入图片描述
在这里插入图片描述
一样是O(1),不涉及扩容,但是每次插入会new Node对象
在这里插入图片描述
一样是O(n)

看起来效率是一样的

将上面的业务代码简化然后测试一下
在这里插入图片描述
count=十万效率基本一致
count=一百万时,ArrayList是LinkedList的十倍

在业务代码中不会有这么大数据量,性能基本没差

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐