ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)

通过index获取元素的值
java里面的链表可以添加索引,而C中的链表,是没有索引的

- package ArrayListVSLinkedList;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.LinkedList;
- ArrayList和LinkedList向后追加元素的性能比较
- /**
- * Created by IntelliJ IDEA.
- * User: luhba
- * Date: 17-8-10
- * Time: 下午7:06
- * To change this template use File | Settings | File Templates.
- */
- public class ArrayListVSLinkedList
- {
- public static void ArrayListTest(long num)
- {
- ArrayList list = new ArrayList() ;
- long berforeTime= new Date().getTime();
- for(int i=0;i<num;i++)
- {
- list.add(i,i);
- }
- long afterTime = new Date().getTime();
- System.err.println("The process ArrayListTest used a total time is "+(afterTime-berforeTime) +" millisecondes !" );
- }
- public static void linkedList(long num)
- {
- LinkedList list = new LinkedList();
- long berforeTime= new Date().getTime();
- for(int i=0;i<num;i++)
- {
- list.add(i,i);
- }
- long afterTime = new Date().getTime();
- System.err.println("The process linkedList used a total time is "+(afterTime-berforeTime) +" millisecondes !" );
- }
- public static void main(String[] args)
- {
- ArrayListVSLinkedList.ArrayListTest(100000);
- ArrayListVSLinkedList.linkedList(100000);
- }
- }
执行的结果是:
The process ArrayListTest used a total time is 31 millisecondes !
The process linkedList used a total time is 32 millisecondes !
这个是为什么呢?顺序存储插入的速度竟然比链式存储的还要快?
答:这个例子是顺序存储的最理想的方式,不用向后移动一个element,所以速度相当。那么再举一个差别最大
//数组和链表在头部插入数据的效率
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List; public class Hi{
public static void ArrayListTest(long num){
List list = new ArrayList() ;
long berforeTime= new Date().getTime();
for(int i=0;i<num;i++){ //在数组的头部插入一个元素
list.add(0,i);
}
long afterTime = new Date().getTime();
System.err.println("The process ArrayListTest used a total time is "+(afterTime-berforeTime) +" millisecondes !" ); long t1= new Date().getTime();
while(!list.isEmpty()){
while(!list.isEmpty()){
list.remove(0);
}
}
long t2 = new Date().getTime();
System.err.println("数组删除"+(t2-t1));
}
public static void linkedList(long num){
List list = new LinkedList();
long berforeTime= new Date().getTime();
for(int i=0;i<num;i++) {
list.add(0,i); /*添加元素:添加单个元素
如果不指定索引的话,元素将被添加到链表的最后*/
}
long afterTime = new Date().getTime();
System.err.println("The process linkedList used a total time is "+(afterTime-berforeTime) +" millisecondes !" ); long t1= new Date().getTime();
while(!list.isEmpty()){
list.remove(0);
}
long t2 = new Date().getTime();
System.err.println("链表删除"+(t2-t1));
}
public static void main(String[] args){
Hi.ArrayListTest(99999*5);
Hi.linkedList(99999*5);
}
}
ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)的更多相关文章
- ArrayList 和 LinkedList的执行效率比较
一.概念: 一般我们都知道ArrayList* 由一个数组后推得到的 List.作为一个常规用途的对象容器使用,用于替换原先的 Vector.允许我们快速访问元素,但在从列表中部插入和删除元素时,速度 ...
- ArrayList 和linkedList 插入比较
从学Java开始, 就一直大脑记着 arrayList 底层是数组 ,查询快, 插入慢, 有移动的动作.linkedList 底层链表, 插入快 查询慢,今天写了例子跑了跑, 果然. public ...
- STL插入删除和查询测试
博客园的markdown不知道怎么插入C++代码,只好放弃了..本文在我的blog发布:http://jwk000.github.io/2015/09/02/20150902/
- java集合框架05——ArrayList和LinkedList的区别
前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...
- 面试题——ArrayList和LinkedList的区别
List概括 先回顾一下List在Collection的框架图: 从图中可以看出: List是一个接口,他继承Collection接口,代表有序的队列. AbstractList是一个抽象类, ,它继 ...
- 老徐和阿珍的故事:ArrayList和LinkedList的效率到底哪个高?
人物背景: 老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐.据说之前炒某币败光了所有家产,甚至现在还有欠债. 阿珍,女,本名陈家珍,刚 ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
最新最准确内容建议直接访问原文:ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性 ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转载)
原文地址: http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 原文地址: http://www.trinea.cn ...
随机推荐
- python打印cookies获取cookie
def test_002_buy_ticket(self): data = [{"}] print(data) data = json.dumps(data) cookies = self. ...
- English trip V1 - 5.That's Amazing! 棒极了! Teacher:Patrick Key: can or can't
In this lesson you will learn to describe what people can do. 在本课中,您将学习如何描述人们可以做什么. STARTE drive a c ...
- 牛客网暑期ACM多校训练营(第三场)DEncrypted String Matching fft
题意:给你一个解密后的字符串,给你加密方式,加密过程可能出错,字符可能加减1,然后给你一个字符串,要求匹配个数(其实我也不太懂具体怎么加密解密,反正你把给你的前两个字符串用第三个加密一下,然后搞可以有 ...
- IDEA搭建ssm框架测试衍生出的问题The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Develop\jdk7\jdk1.7.0_79\bin;
最近玩起IDEA这开发工具,搭建ssm框架测试时,部署项目出现如下问题: 信息: The APR based Apache Tomcat Native library which allows opt ...
- python-day14--带参数的装饰器+多个装饰器装饰同一个函数
1.# 带参数的装饰器def f1(flag): def f2(func): def inner(*args,**kwargs): if flag: '''执行函数之前要做的''' r=func(*a ...
- Linux系统中切换用户身份su与sudo的用法与实例
日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:s ...
- postgresql数据库常用命令
--获取数据库软件版本select version();--获取数据库启动时间select pg_postmaster_start_time();--获取配置文件最近load时间select pg_c ...
- HeaderExchangeClient
HeaderExchangeClient 注释是DefaultMessageClient,类中定义了心跳定时器HeaderExchangeChannel 发送请求HeaderExchangeHandl ...
- 获取和设置消息队列的属性msgctl,删除消息队列
消息队列的属性保存在系统维护的数据结构msqid_ds中,用户可以通过函数msgctl获取或设置消息队列的属性. int msgctl(int msqid, int cmd, struct msqid ...
- ShiroFilterFactoryBean 处理拦截资源文件问题(Shiro权限管理)
一.需要定义ShiroFilterFactoryBean()方法,而ShiroFilterFactoryBean.class是实现了FactoryBean和BeanPostProcessor接口: 1 ...