还原真像:ArrayList性能几乎完美,100万数据测试

还原真像:ArrayList性能几乎完美,100万数据测试

程序汪汪 2018-07-17 22:17:21

背景

程序员面试题中经常遇到ArrayList与LinkedList区别,现实的测试情况肯定没多少人清楚。

还原真像:ArrayList性能几乎完美,100万数据测试_第1张图片

 

理论是这样,现实测试情况很打脸啊。

学习目标

  • 搞清楚JDK1.8种ArrayList与LinkedList的性能情况

代码例子

环境准备:java jdk1.8版本,100万数据量,台式机8G内存、双核【速度很快哦】

注意测试结果,跟硬件配置关系很大,返回时间都是毫秒

程序员注意啦:NUM是100万,

还原真像:ArrayList性能几乎完美,100万数据测试_第2张图片

 

还原真像:ArrayList性能几乎完美,100万数据测试_第3张图片

 

测试结果

批量循环100万次添加元素,ArrayList、LinkedList的表现

  • 【尾部加元素】,性能都是差不多的。
  • 【首部加元素】,LinkedList就完虐ArrayList了

还原真像:ArrayList性能几乎完美,100万数据测试_第4张图片

 

为啥首部加元素ArrayList慢了?

原因就是多了如下代码,

还原真像:ArrayList性能几乎完美,100万数据测试_第5张图片

 

源码说明,如下。

还原真像:ArrayList性能几乎完美,100万数据测试_第6张图片

 

ArrayList的尾部添加元素,就比首部添加元素少个COPY操作。

还原真像:ArrayList性能几乎完美,100万数据测试_第7张图片

 

单个元素添加

性能没显著差异

ArrayList首部添加一个元素,性能消耗也非常小的。

核心测试代码

arrayList.add(0,new Content("11111""程序汪汪",2,"2018-03-16"));

linkedList.add(new Content("11111""程序汪汪",2,"2018-03-16"));

还原真像:ArrayList性能几乎完美,100万数据测试_第8张图片

 

随机获取

性能没显著差异

核心测试代码

arrayList.get(555555);

linkedList.get(555555);

还原真像:ArrayList性能几乎完美,100万数据测试_第9张图片

 

单个删除

性能没显著差异

核心测试代码

arrayList.remove(arrayList.get(555555));

linkedList.remove(555555);

还原真像:ArrayList性能几乎完美,100万数据测试_第10张图片

 

总结

  • 除了在批量首部添加元素ArrayList性能差,其他情况都非常强劲啊。
  • 放心的用ArrayList吧,我这可是100万数据量,平时那点数据量性能消耗就更小了。

你可能感兴趣的:(java基础)