线性表在内存中是一块连续的存储空间;如:一个表中的内容是:【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. C杂记

    printf主要是为了便于取地址,默认将char,short变成了int,float变成了double:但scanf的时候,因为数据宽度的问题,必须区分%f和%lf. memset 是字符串操作函数: ...

  2. webservice实验一

    实验目的:安装jdk1.6_21以后的版本,利用JAX-WS API自己发布webservice并调用,以及用wsimport生成webservice客户端代码调用一个免费的web服务(如webxml ...

  3. 几种判断asp.net中session过期方法的比较

    方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断: protected void Page_Load(object sender, EventArgs e) { if ...

  4. JS - To my gril

    /* 这个程序的流程是 , 首先执行 构造函数 (), 然后 就去执行那个 render 渲染 , 在 render 哪里 的if else 转向应该执行的渲染方法 , 例如 commitsrende ...

  5. 《软件工程》individual project开发小记(一)

    今天周四没有想去上的课,早八点到中午11点半,下午吃完饭后稍微完善了一下,目前代码可以在dev c++和vs2012上正常运行,性能分析我看资料上一大坨,考虑到目前状态不太好,脑袋转不动了,决定先放一 ...

  6. Objective-C determine data network type of the iOS device

    Im on an application that receive data from server, the problem is when user connect to cellular dat ...

  7. 关于linux python vim的一些基础知识(很零散)

    清空文件夹filenmae下所有文件 rm filename/* vim复制大量代码段 num+yy 从光标起始处复制num个数行 然后 python: 设置中断 1.from IPython imp ...

  8. 在magneto系统中输出tier price的最小值

    2012年6月16日星期六 Asia/Shanghai上午11时39分22秒 有的时候,我们想输出产品的tier price 的最小值!如图: 下面是解决的办法: 1. 在catalog/produc ...

  9. magento中的ajax

    <script type="text/javascript">        function loadRecommend(){         $.ajax({    ...

  10. 六 JSP 和 Servlet 的系统调优技巧

    方法一:在 Servlet 的 init() 函数中申请缓冲数据 方法二:禁止 Servlet 和 JSP 的自动重载: Servlet/JSP 提供了一个实用的技术,即自动重载技术,它为开发人员提供 ...