java 中ArrayList与LinkedList性能比较
发布时间 - 2026-01-11 00:02:30 点击率:次java 中ArrayList与LinkedList性能比较

今天看一框架的代码,看到有些 可以使用ArrayList的地方 使用的是 LinkedList,用到的情景是在一个循环里面进行顺序的插入操作。
众所周知java里面List接口有两个实现ArrayList 和 LinkedList,他们的实现原理分别是c语言中介绍的数组和链表。
正如学习数据结构时的认识,对于插入操作,链表的结构更高效,原因是可以通过修改节点的指针 就可以完成插入操作, 而不像数组,
需要把插入位置之后的数组元素依次后移。
但是,实际情况真如上面设想一样吗,下面通过一个简单的例子实践,看能得出什么结论。
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
List<String> linkedList = new LinkedList<String>();
long time1 = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
arrayList.add(new String("abc"));
}
long time2 = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
linkedList.add(new String("abc"));
}
long time3 = System.currentTimeMillis();
System.out.println("arrayList.insert_time = " + (time2 - time1));
System.out.println("linkedList.insert_time = " + (time3 - time2));
long time11 = System.currentTimeMillis();
for(int i = 0; i < 10000; i++) {
int random = RandomUtils.nextInt(10000);
String temp = arrayList.get(random);
}
long time12 = System.currentTimeMillis();
for(int i = 0; i < 10000; i++) {
int random = RandomUtils.nextInt(10000);
String temp = linkedList.get(random);
}
long time13 = System.currentTimeMillis();
System.out.println("arrayList.read_time = " + (time12 - time11));
System.out.println("linkedList.read_time = " + (time13 - time12));
}
运行结果:
arrayList.insert_time = 188 linkedList.insert_time = 250 arrayList.read_time = 16 linkedList.read_time = 234
通过结果可以看出:无论什么情况,ArrayList更加高效。尤其对于随机读取,数组的效率是链表的14倍之多。
而插入操作,两者用时相差不多,但是还是数组的实现效率高一些。
对于其中原因,仔细想想也不难想明白。
当List存储的内容不多时,写入List的最后的元素,ArrayList和LinkedList用时差不多。
但是当List存储的元素个数很大时,通过数组结构实现的ArrayList插入到最后可以通过数组下标很快访问到,但是LinkedList就需要访问每个节点直到找到最后的元素再进行插入操作,这中操作步骤的耗时是巨大的,所以列表数量越大,LinkedList就越感吃力了。
当然,对于要求随机插入的场景,这个时候LinkedList就要比ArrayList适合了。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# ArrayList和LinkedList性能比较
# java
# ArrayList与LinkedList比较
# JAVA LinkedList和ArrayList的使用及性能分析
# 分析Java中ArrayList与LinkedList列表结构的源码
# Java中ArrayList和LinkedList的遍历与性能分析
# java中ArrayList与LinkedList对比详情
# java中ArrayList和LinkedList的区别详解
# Java中ArrayList和LinkedList区别
# Java中ArrayList和LinkedList的区别
# JAVA中ArrayList与LinkedList二者特点与区别总结
# 可以通过
# 链表
# 的是
# 他们的
# 是在
# 不多
# 数据结构
# 希望能
# 这个时候
# 要比
# 实际情况
# 可以使用
# 可以看出
# 越大
# 谢谢大家
# 之多
# 就越
# 众所周知
# 就可以
# 真如
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
什么是javascript作用域_全局和局部作用域有什么区别?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何挑选最适合建站的高性能VPS主机?
如何用免费手机建站系统零基础打造专业网站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何快速辨别茅台真假?关键步骤解析
C语言设计一个闪闪的圣诞树
Laravel如何优化应用性能?(缓存和优化命令)
如何将凡科建站内容保存为本地文件?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何打造高效商业网站?建站目的决定转化率
制作公司内部网站有哪些,内网如何建网站?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
PHP正则匹配日期和时间(时间戳转换)的实例代码
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Java垃圾回收器的方法和原理总结
python中快速进行多个字符替换的方法小结
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何在IIS中配置站点IP、端口及主机头?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Python正则表达式进阶教程_复杂匹配与分组替换解析
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
简历在线制作网站免费版,如何创建个人简历?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在建站之星网店版论坛获取技术支持?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何用景安虚拟主机手机版绑定域名建站?
如何续费美橙建站之星域名及服务?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
EditPlus中的正则表达式实战(5)
个人网站制作流程图片大全,个人网站如何注销?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
昵图网官方站入口 昵图网素材图库官网入口
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Bootstrap CSS布局之列表
上一篇:yii框架中debug怎么用
上一篇:yii框架中debug怎么用

