ArrayList 和linkedList 插入比较
从学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 插入比较的更多相关文章
- ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)
通过index获取元素的值 java里面的链表可以添加索引,而C中的链表,是没有索引的 package ArrayListVSLinkedList; import java.util.ArrayLis ...
- java集合框架05——ArrayList和LinkedList的区别
前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...
- 浅谈Vector、ArrayList、LinkedList
下图是Collection的类继承图 从图中可以看出:Vector.ArrayList.LinkedList这三者都实现了List 接口.所有使用方式也很相似,主要区别在于实现方式的不同,所以对不同的 ...
- 面试题——ArrayList和LinkedList的区别
List概括 先回顾一下List在Collection的框架图: 从图中可以看出: List是一个接口,他继承Collection接口,代表有序的队列. AbstractList是一个抽象类, ,它继 ...
- ArrayList和LinkedList在中间开始插入的快慢比较
首先创建带数据的两个List, 然后在中间插入数据, 观察完成时间 public class Hero { public static void main(String[] args){ listAn ...
- 深入理解java中的ArrayList和LinkedList
杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...
- Java数据结构之表的增删对比---ArrayList与LinkedList之一
一.Java_Collections表的实现 与c不同Java已经实现并封装了现成的表数据结构,顺序表以及链表. 1.ArrayList是基于数组的实现,因此具有的特点是:1.有索引值方便查找,对于g ...
- C++模拟实现JDK中的ArrayList和LinkedList
Java实现ArrayList和LinkedList的方式采用的是数组和链表.以下是用C++代码的模拟: 声明Collection接口: #ifndef COLLECTION_H_ #define C ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...
随机推荐
- 【转】硬盘分区知识介绍(MBR)
转自:http://www.blogjava.net/galaxyp/archive/2010/04/25/319344.html 硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神奇, ...
- 清除浏览器默认样式——css reset & normalize.css
css reset 自己挨个清除很麻烦 可以使用网上一些css库——css reset 把模板复制到css文件最上方,其他的样式我们自己编写来覆盖它们 但是这个也有一些弊端,会把一些本来需要的样式给清 ...
- bzoj1036题解
[解题思路] 直接上树剖套线段树/BIT即可.复杂度o(n+qlog22n)(线段树)或o(n+qlog23n)(BIT). [参考代码] 树剖套BIT.(这个树剖好naive啊QAQ) #inclu ...
- Nmap扫描与Tcpdump抓包分析
扫描与抓包分析 3.1 问题 本案例要求熟悉Linux主机环境下的常用安全工具,完成以下任务操作: 使用NMAP扫描来获取指定主机/网段的相关信息 使用EtterCAP截获明文通信的密码.检测非加密通 ...
- delphi 获取文件图标
{根据文件的名字得到此文件在系统中对应大小的图标large=true(64*64) false(32*32)}procedure GetFileIcon(TypeName: Widestring; I ...
- NOIp2018集训test-9-23
这个NOI模拟题怕是比你们的NOIp模拟题要简单哦.. 友好的生物 应该是一道简单题,但是机房只有辉神一个人想到正解似乎. 被我kd-tree水过去了(这不是kd-tree的裸题吗???(不是)) / ...
- C++之内存分区
- 转-Windows下anaconda简单使用教程
转自:https://www.cnblogs.com/Dota-wiki/p/7871838.html Anaconda is a completely free Python distributio ...
- 2、http请求与http响应
我们在接口测试过程中,可能会用http协议,webservice协议,当然用的较多的还是http协议,webservice协议在此不做过多介绍,我们先了解一下http协议,然后重点介绍http请求与响 ...
- 最短路(模板Dtra
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const i ...