线性表在内存中是一块连续的存储空间;如:一个表中的内容是:【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. HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)

    题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...

  2. 认真对待每一道算法题 之 两个排序好的数组寻找的第k个大的数

    转载博客:http://www.cnblogs.com/buptLizer/archive/2012/03/31/2427579.html 题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列 ...

  3. Chapter 3: Connector(连接器)

    一.概述 Tomcat或者称之为Catalina(开发名称),可以简化为两个主要的模块,如下图: 多个Connector关联一个Container.之所以需要多个Connector,是为了处理多种协议 ...

  4. 刷固件Layer1到手机FLASH(硬刷)

    开头: 注意:本文章并不是做GSM 嗅探必须的,平时我们刷机叫软刷是刷到内存里面的,断电就消失了,这个是硬刷,刷到flash里面的,断电不消失,开机就运行的. 本文章经过作者实测可行,这只是单个应用程 ...

  5. Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)

    题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...

  6. Include and Require

    The include or require statement takes all the text/codde/markup that exists in the specified file a ...

  7. mac下U盘装机系统的制作(命令行)

    1,不插入U盘和插入U盘分别命令检测硬盘,确定要制作的U盘号:diskutil list 2,卸载usb盘,不推出,diskutil umountDisk /dev/disk1 3,将dmg写入U盘, ...

  8. Foobar音乐播放器——最佳音乐播放器 - imsoft.cnblogs

    简单皮肤 下载地址:链接: http://pan.baidu.com/s/1kTwn2dh 密码: lf5f

  9. 行为识别笔记:improved dense trajectories算法(iDT算法)(转载)

    iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法.由INRIA的IEAR实验室于2013年发表于ICCV.目前基于深度学习的行为识别算法效果已经超过了iDT算法 ...

  10. char类型与Unicode的编码

    Java的char型是非常独特的,占用两个字节,因为Java中char型采用了Unicode编码. 要理解这个问题,我们必须要理解什么是Unicode. 世界上存在着多种编码方式,同一个二进制数字可以 ...