一、创建集合并添加元素(从末尾位置添加)

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对比的更多相关文章

  1. 基于Java的ArrayList和LinkedList的实现与总结

    一.定义MyList接口,包含列表常见方法: import java.util.Iterator; /** * 线性表(列表)的接口定义 */ public interface MyList<T ...

  2. Java数据结构之表的增删对比---ArrayList与LinkedList之一

    一.Java_Collections表的实现 与c不同Java已经实现并封装了现成的表数据结构,顺序表以及链表. 1.ArrayList是基于数组的实现,因此具有的特点是:1.有索引值方便查找,对于g ...

  3. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)

    主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...

  4. ArrayList和LinkedList的几种循环遍历方式及性能对比分析

    最新最准确内容建议直接访问原文:ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性 ...

  5. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转载)

    原文地址: http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 原文地址: http://www.trinea.cn ...

  6. ArrayList和LinkedList遍历方式及性能对比分析

    ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayLis ...

  7. 【转】ArrayList和LinkedList的几种循环遍历方式及性能对比分析

    原文网址:http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 主要介绍ArrayList和LinkedList这两种 ...

  8. Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]

    Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...

  9. (转)ArrayList和LinkedList的几种循环遍历方式及性能对比分析

    主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...

随机推荐

  1. 【ABP框架系列学习】模块系统(4)

    0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施.一个模块可以依赖于另外一个模块.通常,程序集可以认为是模块.如果创建多个程序集的应用程序,建议为每个程序集创建模块定义. 当前,模 ...

  2. 【shiro】(2)---基于RUL的权限管理

    基于RUL的权限管理 我想在写shiro权限管理认证前,先来一个基于URL实现的权限管理控制. 一.基于URI的权限业务逻辑  实现思路:       将系统操作的每个url配置在权限表中,将权限对应 ...

  3. Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  4. Spring Cloud微服务下的权限架构调研

    随着微服务架构的流行,系统架构调整,项目权限系统模块开发提上日程,需要对权限架构进行设计以及技术选型.所以这段时间看了下相关的资料,做了几个对比选择. 一.架构图 初步设想的架构如下,结构很简单:eu ...

  5. shiro + jwt 实现 请求头中的 rememberMe 时间限制功能

    前言: 上一篇提出, 通过修改 rememberMe 的编码来实现 rememberMe的功能的设想, 事后我去尝试实现了一番, 发现太麻烦, 还是不要那么做吧. 程序还是要越简单越好. 那功能总是要 ...

  6. Java——对象比较

    前言 本篇博客主要梳理一下Java中对象比较的需要注意的地方,将分为以下几个方面进行介绍: ==和equals()方法 hashCode()方法和equals()方法 Comparator接口和Com ...

  7. 翻译:SET子句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:SET的译文. 原文:https://mariadb.com/kb/en/set/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh ...

  8. Linux文件权限与属性详解 之 ACL

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  9. 华为路由器 IPSec 与 GRE 结合实验

    二者结合的目的 GRE 支持单播.组播.广播,IPSec 仅支持单播.GRE 不支持对于数据完整性以及身份认证的验证功能,并且也不具备数据加密保护.而 IPSec 恰恰拥有强大的安全机制.达到了互补的 ...

  10. maven web工程缺少 src/main/java 和 src/test/java 资源文件夹的方法

    右键打开:build path -> configure build path... 在弹出的界面,选择: 编辑后: 点击finish,即可完成