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 ...
随机推荐
- 1月11日Atom 插件安装。
查看已安装的Atom插件(前提:已经安装Atom) 打开终端 输入apm ls命令,回车. 未安装任何插件时,显示如下 Built-in Atom packages (89) ...此处省略... / ...
- Android之RecyclerView实现时光轴
做项目的过程中有个需求需要时光轴,于是网上找了部分资料 ,写了个案例,现在分享给大家. 如图: activity_main.xml <?xml version="1.0" e ...
- AC自动机练习
多模板串匹配一般有两种方法 暴力kmp, 适用于模板串少的情形 直接trie上暴力, 适用于模板串比较短的情形, 并且可以动态插入合并 建立AC自动机, 复杂度是严格线性的, 但不能动态插入 cons ...
- 『Scrapy』爬虫框架入门
框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...
- fzu1901 kmp
For each prefix with length P of a given string S,if S[i]=S[i+P] for i in [0..SIZE(S)-p-1], then the ...
- UVA-10710 Skyscraper Floors (找规律+幂取模)
题目大意:题目中给了一种数的定义,根据定义,让判断一个给定的数是不是这种数.题中叫这种数为吉米数,定义如下:对序列1,2,3,,,,n,做n-1次SF变换(对该变换的解释在下文),如果能得到原序列,则 ...
- 使用iview-project 打包build报错,ERROR in xxxxx.cheunk.js from UglifyJs
一.iview-project 为iview官方推荐工程,一个基于iview的vue脚手架 github网址:https://github.com/iview/iview-project 废话不多说 ...
- iddea代码调试debug篇
代码调试debug篇 主要看图,看图一目了然. 断点的设定和eclipse一样,只要点一下就可以,下面是我设定的几个断点,再下面的三个窗口是用来调试代码的,这个和eclipse类似 调试常用的快捷键 ...
- duilib 实现 XML重用(item完全重合的CList)
最近做一个项目,界面库用的是duilib. 软件首页的左侧是一个机型列表,右侧是机型信息及其他信息,点击左侧的机型,右边跟着变为对应的信息. 由于右侧信息比较复杂,还有进度条什么的,所以如果右侧只用一 ...
- UVSLive 6324 求射箭覆盖的期望
DES:给出n条线段.询问每次射中线段条数的期望. 非常简单.就是每条线段的两端与原点相连的直线之间的夹角和.如果夹角大于pi.就是2pi减去这个角.最后除以总值2pi就是所求的期望. atan2(y ...