章节七、3-ArrayList和LinkedList对比
一、创建集合并添加元素(从末尾位置添加)
package ZangJie7; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class LinkedListDemo {
/***
* ArrayList 底层是数据实现的,是连续的空间{0,1,2,3,4,5,6},如果从最后的位置增除的话,用ArrayList比较快,
* 用ArrayList增删元素时,会造成原素位空缺,其它已经存在的元素会向前或者向后移动,影响程序效率。 * LinkedList 如果从最开始的位置删除的话,用LinkedList 比较快
* LinkedList是使用索引存储元素,采用的是手拉手的形式,增删时不会带来元素的移动,所以效率比ArrayList要快。
*/ public static void main(String[] args) {
List <Integer> alist = new ArrayList<Integer>();
List<Integer> llist = new LinkedList<Integer>();
runDuration(alist,"ArrayList");
runDuration(llist,"LinkedList");
}
public static void runDuration(List<Integer> list,String listType){
System.out.println("\n duration方法的开始,用的集合是:"+listType);
//记录开始时当前时间
long startTime = System.currentTimeMillis();
for(int i = 0;i<100000;i++) {
list.add(i);
}
//记录结束时当前时间
long endTime = System.currentTimeMillis();
//持续时间
long duration = endTime-startTime;
System.out.println("集合"+listType+"用时为"+duration+"毫秒");
} }
二、计算集合大小
package ZangJie7; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class LinkedListDemo {
/***
* ArrayList 底层是数据实现的,是连续的空间{0,1,2,3,4,5,6},如果从最后的位置增除的话,用ArrayList比较快,
* 用ArrayList增删元素时,会造成原素位空缺,其它已经存在的元素会向前或者向后移动,影响程序效率。 * LinkedList 如果从最开始的位置删除的话,用LinkedList 比较快
* LinkedList是使用索引存储元素,采用的是手拉手的形式,增删时不会带来元素的移动,所以效率比ArrayList要快。
*/ public static void main(String[] args) {
List <Integer> alist = new ArrayList<Integer>();
List<Integer> llist = new LinkedList<Integer>();
runDuration(alist,"ArrayList");
runDuration(llist,"LinkedList");
}
public static void runDuration(List<Integer> list,String listType){
System.out.println("\n duration方法的开始,用的集合是:"+listType);
for(int i = 0;i<100000;i++) {
list.add(i);
}
//获取集合大小
int size = list.size();
//添加元素
int elementToAdd = size + 10000; System.out.println("第一次添加的元素个数为:"+elementToAdd); //记录开始时当前时间
long startTime = System.currentTimeMillis();
for(int i = size;i<elementToAdd;i++) {
list.add(i);
}
System.out.println("第一次添加的元素个数为:"+list.size());
//记录结束时当前时间
long endTime = System.currentTimeMillis();
//持续时间
long duration = endTime-startTime;
System.out.println("集合"+listType+"用时为"+duration+"毫秒");
}
}
从运行结果看,LinkedLst比ArrayList运行耗时更少,效率更高。
三、在指定索引位上加元素
package ZangJie7; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class LinkedListDemo {
/***
* ArrayList 底层是数据实现的,是连续的空间{0,1,2,3,4,5,6},如果从最后的位置增除的话,用ArrayList比较快,
* 用ArrayList增删元素时,会造成原素位空缺,其它已经存在的元素会向前或者向后移动,影响程序效率。 * LinkedList 如果从最开始的位置删除的话,用LinkedList 比较快
* LinkedList是使用索引存储元素,采用的是手拉手的形式,增删时不会带来元素的移动,所以效率比ArrayList要快。
*/ public static void main(String[] args) {
List <Integer> alist = new ArrayList<Integer>();
List<Integer> llist = new LinkedList<Integer>();
runDuration(alist,"ArrayList");
runDuration(llist,"LinkedList");
}
public static void runDuration(List<Integer> list,String listType){
System.out.println("\n duration方法的开始,用的集合是:"+listType);
for(int i = 0;i<100000;i++) {
list.add(i);
}
//获取集合大小
int size = list.size();
//添加元素
int elementToAdd = size + 10000; System.out.println("第一次添加的元素个数为:"+elementToAdd); //记录开始时当前时间
long startTime = System.currentTimeMillis();
for(int i = size;i<elementToAdd;i++) {
// list.add(i);
list.add(0, i);
}
System.out.println("第一次添加的元素个数为:"+list.size());
//记录结束时当前时间
long endTime = System.currentTimeMillis();
//持续时间
long duration = endTime-startTime;
System.out.println("集合"+listType+"用时为"+duration+"毫秒");
}
}
从运行结果看,在指定位置插入值时,LinkedLst比ArrayList运行耗时要少,效率更高。
四、从尾部删减元素
package ZangJie7; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class LinkedListDemo {
/***
* ArrayList 底层是数据实现的,是连续的空间{0,1,2,3,4,5,6},如果从最后的位置增除的话,用ArrayList比较快,
* 用ArrayList增删元素时,会造成原素位空缺,其它已经存在的元素会向前或者向后移动,影响程序效率。 * LinkedList 如果从最开始的位置删除的话,用LinkedList 比较快
* LinkedList是使用索引存储元素,采用的是手拉手的形式,增删时不会带来元素的移动,所以效率比ArrayList要快。
*/ public static void main(String[] args) {
List <Integer> alist = new ArrayList<Integer>();
List<Integer> llist = new LinkedList<Integer>();
runDuration(alist,"ArrayList");
runDuration(llist,"LinkedList");
}
public static void runDuration(List<Integer> list,String listType){
System.out.println("\n duration方法的开始,用的集合是:"+listType);
for(int i = 0;i<100000;i++) {
list.add(i);
}
//获取集合大小
int size = list.size();
//添加元素
int elementToAdd = size + 10000; System.out.println("第一次添加的元素个数为:"+elementToAdd); //记录开始时当前时间
long startTime = System.currentTimeMillis();
/*for(int i = size;i<elementToAdd;i++) {
// list.add(i);
list.add(0, i);
}*/ for(int i = 90000;i<92000;i++) {
list.remove(i);
}
System.out.println("第一次添加的元素个数为:"+list.size());
//记录结束时当前时间
long endTime = System.currentTimeMillis();
//持续时间
long duration = endTime-startTime;
System.out.println("集合"+listType+"用时为"+duration+"毫秒");
}
}
从运行结果看,从尾部开始删减元素,ArrayList比LinkedLst运行耗时要少,效率更高。
五、从首部开始删减元素
package ZangJie7; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class LinkedListDemo {
/***
* ArrayList 底层是数据实现的,是连续的空间{0,1,2,3,4,5,6},如果从最后的位置增除的话,用ArrayList比较快,
* 用ArrayList增删元素时,会造成原素位空缺,其它已经存在的元素会向前或者向后移动,影响程序效率。 * LinkedList 如果从最开始的位置删除的话,用LinkedList 比较快
* LinkedList是使用索引存储元素,采用的是手拉手的形式,增删时不会带来元素的移动,所以效率比ArrayList要快。
*/ public static void main(String[] args) {
List <Integer> alist = new ArrayList<Integer>();
List<Integer> llist = new LinkedList<Integer>();
runDuration(alist,"ArrayList");
runDuration(llist,"LinkedList");
}
public static void runDuration(List<Integer> list,String listType){
System.out.println("\n duration方法的开始,用的集合是:"+listType);
for(int i = 0;i<100000;i++) {
list.add(i);
}
//获取集合大小
int size = list.size();
//添加元素
int elementToAdd = size + 10000; System.out.println("第一次添加的元素个数为:"+elementToAdd); //记录开始时当前时间
long startTime = System.currentTimeMillis();
//添加元素
/*for(int i = size;i<elementToAdd;i++) {
// list.add(i);
list.add(0, i);
}*/ /*//从尾部开始删减元素添加元素
for(int i = 90000;i<92000;i++) {
list.remove(i);
}*/ //从首部开始删减元素添加元素
for(int i = 0;i<100;i++) {
list.remove(i);
}
System.out.println("第一次添加的元素个数为:"+list.size());
//记录结束时当前时间
long endTime = System.currentTimeMillis();
//持续时间
long duration = endTime-startTime;
System.out.println("集合"+listType+"用时为"+duration+"毫秒");
}
}
从运行结果看,从首部开始删减原始,LinkedLst比ArrayList运行耗时要少,效率更高。
章节七、3-ArrayList和LinkedList对比的更多相关文章
- 基于Java的ArrayList和LinkedList的实现与总结
一.定义MyList接口,包含列表常见方法: import java.util.Iterator; /** * 线性表(列表)的接口定义 */ public interface MyList<T ...
- Java数据结构之表的增删对比---ArrayList与LinkedList之一
一.Java_Collections表的实现 与c不同Java已经实现并封装了现成的表数据结构,顺序表以及链表. 1.ArrayList是基于数组的实现,因此具有的特点是:1.有索引值方便查找,对于g ...
- 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 ...
- ArrayList和LinkedList遍历方式及性能对比分析
ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayLis ...
- 【转】ArrayList和LinkedList的几种循环遍历方式及性能对比分析
原文网址:http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 主要介绍ArrayList和LinkedList这两种 ...
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
- (转)ArrayList和LinkedList的几种循环遍历方式及性能对比分析
主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...
随机推荐
- 【WebAPI No.1】创建简单的 .NETCore WebApi
介绍: 官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架.Web API最重要的是可以构建面向各种客户端的服务. core的WebAPI与ASP.NET ...
- Salesforce Sales Cloud 零基础学习(一) Product 和 Price Book
以前的博客大部分都是基于force.com以及lightning展开的自定义开发,其实salesforce提供了很多的标准的功能以及平台, Sales Cloud便是作为Salesforce核心的平台 ...
- ArcSDE数据库连接(直连、服务连)与GT_Geometry存储配置图解
众说周知,ArcSDE空间数据库引擎提供了两种连接数据库的方式.一是服务连接方式,一是直连方式.后者也是Esri所推崇的方式.但是,在客户的生产环境和开发商的开发环境中这两种方式都是有需求的.下面就以 ...
- Windows服务器端口绑定证书
打开IIS:inetmgr 打开服务:ctrl+shift+Esc 查看证书秘钥: 服务器查看https证书绑定: 1) 查看证书 netsh http show sslcert 2) 将证书与端口绑 ...
- solr(六): 集群
前言 随着用户的增多,空间和并发量越来越多,会导致一台solr服务器干不过了.这时候,就需要将solr集群以下. 集群架构 由多台服务器共同完成索引和搜索任务 实现的思路是将索引数据进行shard(分 ...
- Jenkins入门之执行定时任务
通过前面我们讲解了如何通过Jenkins执行windows command,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下Build Now按钮来执行 ...
- 简单说明CGI和动态请求是什么
1. CGI是什么 CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意. 我们知道,web服务器所处理的内容都是静态的,要想处理动态内容 ...
- Apollo 10 — adminService 全量发布
目录 UI 界面 Portal 服务 admin 服务 总结 1. UI 界面 2. Portal 服务 当我们点击上面的发布按钮的时候,调用的当然是 portal 的接口.具体代码如下: /** * ...
- python安装Jieba中文分词组件并测试
python安装Jieba中文分词组件 1.下载http://pypi.python.org/pypi/jieba/ 2.解压到解压到python目录下: 3.“win+R”进入cmd:依次输入如下代 ...
- 用python实现红包机制
方法一,逻辑是后一个红包的范围是[0.01,剩下的钱*2/剩下的红包数,如果最后钱不足分配给每个人,就把后几个每人分配0.01元. 主要思想就是,每个人至少能领取到0.01元. import rand ...