线性表在内存中是一块连续的存储空间;如:一个表中的内容是:【1,2,3】则它在内存中可能是如下存储的:1 2 3

优点:查找
      通过这个结构可以看出,只要知道了第一个元素在内存中所在的位置。就可以很容易的知道其他元素的位置。因为每一个元素占的空间是一样的。所以,
如果我们知道第一个元素:1在内存号:1000;而每一个元素占8个内存空间;
             则第二个元素:2所在的内存空间为:1000 + 8;
             依此类推。
总结:在线性表中访问数据元素是很快的。
 
缺点:添加、删除
它的缺点也正因为它是连续的一块内存空间。所以,如果往中间添加或在中间删除一个元素。都要移动其他的元素。
如:我在最前面加入一个元素:0.则 1,2,3都要往后移一位;或,我将1删除,则2,3都要往前移一位;
 
     估算一下运算时间:
在第一个元素处添加,要移动所有的元素。花费的时间是添加元素的时间(a) + 加上移动其他元素的时间(b).
在最后面加元素不需要移动任何元素。时间仅为添加元素的时间(a).
所以添加元素要的平均时间是 (b + 2a)/2;
删除操作和添加操作是一样的;
所以,当改变线性表长度的时间,它会在移动元素上花费大量的时间
总结:往中间添加或在中间删除元素时,都会涉及到大量的元素移动,改变线性表长度时也会涉及到大量元素的移动
 
在JAVA中。线性表的最直接应用就是数组:Array;但Array在初始化的时间必须规定其元素长度。
如:int[] arr = new int[5];必须规定其长度,但内容可以不填。它要知道长度,然后去开辟一块内存空间。一旦数组初始化,它就不能往里面添加,删除元素了。但可以将元素值设为空;
如果需要扩充数组长度,JAVA 提供了另一个类:ArrayList.
JAVA中所有的虚拟出来的数据容器都继承自接口:Collection;ArrayList继承自:List.而List又继承了 Collection;Collection提供了几种基本方 法:add();clear();remove();size();toArray();iterator()等;
ArrayList提供了较灵活的用法:
List<Long> lists = new ArrayList<Long>();
ArrayList<Long> lists = new ArrayList<Long>();
上面的用法使用了泛型。而且lists并未规定长度。它可以在程序中自由扩充。但这一特点就意味着它可能在运行时因为将内存耗尽而出现问题;数组是规定长度的,所以如果内存不足,你根本初始化不了,一旦初始化了就可以随便用。
ArrayList,和Array都是数据结构中线性表的实现。
 
 
 
链表:
链表的存储是链式的,它不强迫数据是在一片连续的内存空间;它可以是分散存储的。所以,它的每个元素除了包括元素的值外,还要包括一些额外的信息;如:它的下一个元素在什么地方。
最基本的链式存储中的元素包括两部分:元素值和下个元素的位置;
可以如下理解:
内存空间:     值      下一元素空间
50              46           空
 .
100            10          200
 .
 .
200            16           50
当存在这个链的时候,我们肯定知道链头在哪,我们假设上面链头在内存空间100处。则上述的链表表示的数据形式是:[10,16,46];知道了链头在哪里,如果要查找其他元素。必须从链头开始,依次查找下一内存空间里的值;所以查找用的时间为N/2;显然就比线性表慢了。如果是删除或添加元 素。例,现在要将:[10,16,46]改成:[10,16,30,46];我们要做的是,将30放在内存中,假设它的内存地址是500;然后再将16这个值的下一元素空间的值改成500;并将30这一数值对应的下一元素空间值改成50(46这个值对应的内存空间);看起来要比线性表简单。但细看会发现: 要添加或删除一个元素,必须知道它的上一个元素是谁;但现在数据中存储的只有某一无线的下一个元素。如果要找上一个元素,则又要从链头开始遍历。这会浪费 大量时间,还不如线性表好用。所以这时候出现了另一链表:双链表.它和基本链表不同的是,每个元素里不但存储了下一个元素的空间,还存储了上一个元素的空间。
JAVA 中对链表的实现是通过类:LinkedList 来实现的。LinkedList 最终也是上溯到了Collection接口;
所以它也有上面说的诸如:add().clear()等方法。
 
 
参考:http://www.cnblogs.com/tianguook/archive/2012/02/14/2350845.html

linearlist和linkedlist的区别 待整理的更多相关文章

  1. LintCode Reverse LinkedList (ArrayList 和 LinkedList 的区别)

    1. ArrayList 和 LinkedList 的区别 http://pengcqu.iteye.com/blog/502676 2. How to reverse LinkedList http ...

  2. 你真的说的清楚ArrayList和LinkedList的区别吗

    参见java面试的程序员,十有八九会遇到ArrayList和LinkedList的区别?相信很多看到这个问题的人,都能回答个一二.但是,真正搞清楚的话,还得花费一番功夫. 下面我从4个方面来谈谈这个问 ...

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

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

  4. Java中ArrayList与LinkedList的区别

    Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...

  5. Java进阶(十七)ArrayList与LinkedList的区别

    ArrayList与LinkedList的区别 ArrayList ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayLis ...

  6. 【转】ArrayList与LinkedList的区别和适用场景

    ArrayList 优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的). 缺点:因为地址连续,当要插入和删除时,Arra ...

  7. JAVA中ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题

    近期在做一个对接京东的电商平台,所以对各个地方的效率考虑的比较多,今天深挖了一下ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题,首先说一下两种 ...

  8. [转帖] select、poll、epoll之间的区别总结[整理] + 知乎大神解答 https://blog.csdn.net/qq546770908/article/details/53082870 不过图都裂了.

    select.poll.epoll之间的区别总结[整理] + 知乎大神解答 2016年11月08日 15:37:15 阅读数:2569 http://www.cnblogs.com/Anker/p/3 ...

  9. 理解ArrayList与LinkedList的区别

    一.先来看看ArrayList与LinkedList 在JDK中所在的位置 从图中可以看出,ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只 ...

随机推荐

  1. SQLSERVER数据库中批量导入数据的几种方法

    第一:使用Select Into 语句 如果企业数据库都是采用SQL Server数据库的话,则可以利用select into语句实现数据的导入. select into语句的作用是把数据从另外一个数 ...

  2. CWNP宣布中国首位CWNE获得者——朱志立(Kevin Zhu)

    CWNP宣布中国首位CWNE获得者——朱志立(Kevin Zhu)   Kevin Zhu获得了全球CWNE认证无线网络专家的第134号,CWNE被公认为IT行业最难获取的10大认证之一.     [ ...

  3. 在windows 、linux下读取目录下所有文件名

    Windows要引入的头文件是<Windows.h> 主要是两个函数FindFirstFile.FindNextFile MSDN里是这么说的: FindFirstFile functio ...

  4. hadoop环境搭建遇到问题集锦

    1  在hadoop的bin目录下, 运行hadoop version命令,提示“hadoop:没有此命令” 解决办法: ./hadoop version或者$HADOOP_HOME/bin放在PAT ...

  5. UITableView全面解析,讲的好详细

    --UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是U ...

  6. 任意阶魔方阵(幻方)的算法及C语言实现

    写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ...

  7. Swift URL Schemes使用

    URL Schemes通常用于分享和第三方登录,但有时需要在html跳至APP,或者APP跳至另外一个APP.这时也需要使用URL Schemes. 一.html跳转至APP eg:html跳转至te ...

  8. IE6-8支持css3属性

    方法一.让IE6-8支持css3属性 <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shi ...

  9. iOS-申请开发证书流程

    1.开发者证书(分为开发和发布两种,类型为ios Development,ios Distribution),这个是最基础的,不论是真机调试,还是上传到appstore都是需要的,是一个基证书,用来证 ...

  10. jQuery对象与DOM对象之间的转换

    刚开始学习jQuery,可能一时会分不清楚哪些是jQuery对象,哪些是DOM对象.至于DOM对象不多解释,我们接触的太多了,下面重点介绍一下jQuery,以及两者相互间的转换. 什么是jQuery对 ...