从学Java开始, 就一直大脑记着  arrayList 底层是数组 ,查询快, 插入慢, 有移动的动作。linkedList 底层链表, 插入快 查询慢,今天写了例子跑了跑, 果然。

public class ListTest {
public static void main(String[] args)throws Exception {
Thread thread = new Thread(()->{
addArraylist(); });
Thread thread2 = new Thread(()->{
addLinkedList();
});
thread.start();
thread.join();
thread2.start();
thread2.join(); }
private static void addArraylist(){
ArrayList<String > arrayList = new ArrayList();
long begin2 = System.currentTimeMillis();
for(int j= 0 ;j<1000000;j++){
arrayList.add(j+"===");
}
System.out.println("arraylist花费了:"+(System.currentTimeMillis()-begin2)+"毫秒");
System.out.println(arrayList.size()); } private static void addLinkedList(){
LinkedList <String >linkedList = new LinkedList();
long begin = System.currentTimeMillis();
for( int i=0 ;i<1000000;i++){
linkedList.add(i+"===");
}
System.out.println("linkedList花费了:"+(System.currentTimeMillis()-begin)+"毫秒");
System.out.println(linkedList.size());
} }

=============输出结构是:

数据量比较少时 ,看的不明显, 当数据在100000以内 ,结果差不多, 大于100 万, 感觉到执行时间差距很大了。心里有个底。

==================================================================================

说下两种集合的用途:

数组, 开发中主要是为了查询快,这个用的最多, 比如从数据库分页查询 数据, 需要 遍历 。

链表 Linkedlist  用作 堆栈(比如虚拟机栈 , 大量的变量作用,指令操作, 基本都链表结构), 队列 比较多, 比如 线程池的 队列啊, 插入删除快。

====================================================================================

从 JVM堆内存分析  效率为啥差别这么大。

为啥数组插入慢,数组有个默认大小,比如16 ,数组在初始化的时候在 内存中会被分配一块连续的内存,第一个元素进来。问角标 0 ,你存东西了吗, 没有, 我就进去啦。后面的元素在插入的时候,要询问多次,【比如第一万个元素, 要询问9999次, 你这位置有人不?】 时间复杂度为O(n),数组的大小;

而  链表不是这样, 并不是一段连续的内存,第一个元素进来, 记下自己的 【value =“张三” ,PRE =null(元素的 hash值) ,NEXT = null】,

第二个元素进来, 拿到上一个元素的值,先把张三的 next 改成自己  ,【value =“张三” ,PRE =null(元素的 hash值) ,NEXT = 5654654654(“李四的地址值”)】

然后把自己加进去了,类似于【value=“李四,PRE=343434("张三”),next=null】。

插入的时间复杂度为O(1),就很快了。 不用移动指针, 就特别 爽。

ArrayList 和linkedList 插入比较的更多相关文章

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

    通过index获取元素的值 java里面的链表可以添加索引,而C中的链表,是没有索引的 package ArrayListVSLinkedList; import java.util.ArrayLis ...

  2. java集合框架05——ArrayList和LinkedList的区别

    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...

  3. 浅谈Vector、ArrayList、LinkedList

    下图是Collection的类继承图 从图中可以看出:Vector.ArrayList.LinkedList这三者都实现了List 接口.所有使用方式也很相似,主要区别在于实现方式的不同,所以对不同的 ...

  4. 面试题——ArrayList和LinkedList的区别

    List概括 先回顾一下List在Collection的框架图: 从图中可以看出: List是一个接口,他继承Collection接口,代表有序的队列. AbstractList是一个抽象类, ,它继 ...

  5. ArrayList和LinkedList在中间开始插入的快慢比较

    首先创建带数据的两个List, 然后在中间插入数据, 观察完成时间 public class Hero { public static void main(String[] args){ listAn ...

  6. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

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

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

  8. C++模拟实现JDK中的ArrayList和LinkedList

    Java实现ArrayList和LinkedList的方式采用的是数组和链表.以下是用C++代码的模拟: 声明Collection接口: #ifndef COLLECTION_H_ #define C ...

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

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

随机推荐

  1. 谷歌浏览器控制台出现 Unchecked runtime.lastError: The message port closed before a response was received. 的报错

    错误截图: 解决:经过网上搜索说是浏览器扩展程序的问题,把那个扩展程序删除或者禁用就可以了

  2. C#中反射的基础基础基础

    class Program { static void Main(string[] args) { Type t = typeof(Student);//typeof(类) 取类的类型 并且存储在Ty ...

  3. MongoDB启动时遇到的问题

    问题一:child process failed, exited with error number 100 原因分析:100是锁了 解决办法:#cd  /usr/local/mongodb/data ...

  4. Go const 关键字

    Go const 关键字 package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int ...

  5. bzoj1070题解

    [解题思路] 考虑拆点,得到一个二分图:左边点<i,j>表示第i个技师按顺序第j辆修的车,右边点k表示第k个车主,连接左右的边表示第k个车主可能成为第i个技师的第j个客户. 因为是二分图, ...

  6. NX二次开发-NXOPEN设置工程图表格注释字体workPart->Fonts()->AddFont("chinesef_fs", NXOpen::FontCollection::TypeNx);

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...

  7. 9.RabbitMQ Topic类型交换机

    RabbitMQ消息服务中Topic类型交换机根据通配符路由消息,*代表一个单词,#代表代表0或多个单词.   生产者 消费者   代码 Producer.java   package com.tes ...

  8. Hadoop2.X主要模块默认端口及作用

    Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...

  9. CSS如何让文字垂直居中?

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  10. 2018ICPC焦作 D-Keiichi Tsuchiya the Drift King /// 几何

    题目大意: https://nanti.jisuanke.com/t/34142 有一个弯道抽象成圆的一部分 车子抽象成矩形 漂移过程中矩形上边会与圆的圆心在同一条直线上 以右上点贴着弯道边缘进行漂移 ...