章节七、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的源码实现分析性能结果,总结结论. 通过本文你可以 ...
随机推荐
- [原创]K8Cscan插件之端口扫描C#源码
[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )
众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端 ...
- ubuntu设置IP地址&修改vi模式键盘上下键错位
解决ubuntu上面使用vi 出现方向键错乱的情况 编辑/etc/vim/vimrc.tiny 使用root权限操作:将“set compatible”改成“set nocompatible” 新增一 ...
- sql server 索引阐述系列一索引概述
一. 索引概述 关于介绍索引,有一种“文章太守,挥毫万字,一饮千钟”的豪迈感觉,因为索引需要讲的知识点太多.在每个关系型数据库里都会作为重点介绍,因为索引关系着数据库的整体性能, 它在数据库性能优化里 ...
- 【Android基础】Fragment 详解之Fragment介绍
Fragment在Android 3.0( API 11)引入,是为了支持在大屏上显示更加动态.灵活的UI,比如在平板和电视上.Fragment可以看作是嵌套的Activity,类似ActivityG ...
- 一文带你看懂cookie,面试前端不用愁
本文由云+社区发表 在前端面试中,有一个必问的问题:请你谈谈cookie和localStorage有什么区别啊? localStorage是H5中的一种浏览器本地存储方式,而实际上,cookie本身并 ...
- go builtin包
Go builtin包提供了go预先声明的函数.变量等的文档.这些函数变量等的实现其实并不是在builtin包里,只是为了方便文档组织. 这些内置的变量.函数.类型无需引入包即可使用. 默认提供的有: ...
- Mysql加锁过程详解(1)-基本知识
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Redis客户端操作之Jedis
在前面的文章给大家详细的介绍了Redis各种知识点,本文主要给大家介绍下java程序怎么操作Redis数据. Redis之集群环境搭建 Redis官网中提供了各种语言的客户端,使用起来很方便, ...
- Docker镜像管理基础与基于容器的镜像制作示例
一.Docker镜像 Docker镜像是启动Docker容器的一个非常重要的组件.Docker各组件之间的关系如图: Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建 ...