`
sungang_1120
  • 浏览: 321661 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

数组与链表到底有啥区别?

阅读更多

数组与链表的区别:

 

数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要望某个位置插入或删除一个人时,后面的人身上的编号都要变。

 

链表就像手牵着手站成一圈的人,要找第10个人不容易,必须从第一个人一个个数过去。但插入、删除快。插入时只要解开两个人的手,并重新牵上新加进来的人的手就可以。删除一样的道理

 

1.从逻辑结构来看

 

可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费。

 

数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数,造成数组越界;当数据减少时,造成内存浪费。

 

 

 

链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。因为数组中插入、删除数据项时,需要移动其它数据项,而链表的插入与删除时,只需要改变个别元素之间的关系即可,这大大提高了链表的删除与插入的速度。

 

链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。而它们之间的区别可以从两个方面来分析

 

 

 

2.从内存存储来看

 

数组从栈中分配空间, 对于程序员方便快速,但是自由度小

 

链表从堆中分配空间, 自由度大但是申请管理比较麻烦.

 

Java中体统自带的动态数组与链表

 

         ArrayListLinkedList,这是Java中的动态数组和链表。动态数组其实比较简单,就是一个长度可以根据实际情况改变的数组。我们如果要查找某一个动态数组中的元素,可以通过get()方法来查找,只要知道该元素下标就可以了。
       
LinkedList,也就是链表,这个与我们所知道的一般链表稍有不同。一般的链表元素中,除了放这个结点的数据外,还指向下一个结点。一个指向下一个,就这样构成了链表。但是Java中的链表,除了放本来的数据和指向下一个结点外,还指向上一个结点。因此,Java中的LinkedList是双向的。那么有什么用呢?还有就是ArrayListLinkedList有什么区别?
       
这 个就要从查找元素的效率和添加删除元素的效率来讲了。在动态数组中,如果我们要在某一个位置添加或者删除一个元素,剩下的每个元素都要相应地往前或往后移 动。如果该动态数组中的元素很多,那么,每当我们添加或删除一个元素后,需要移动的元素就非常多,因此,效率就比较低。但是,如果我们使用LinkedList就不一样了。如果我们要在某一个位置添加一个元素,例如,要在A, C之间插入B。本来A是指向CC也指向A的。现在,只需要将B放到AC之间,同时让B向前指向A,向后指向C,并且让AC指向B,让CA指向B就可以了。如果该链表中元素非常多,我们只需做这个操作就可以了,并不需要移动剩下的元素。所以说LinkedList在添加和删除元素上的效率要比ArrayList高很多。而且,Java中有一个叫ListIterator的迭代器。该迭代器不仅可以向后迭代元素,还能向前迭代,而且还有add()来在某一位置添加元素,十分方便。不过说到查找效率的话就反过来了,是ArrayList的效率比LinkedList的效率高,因为你只要提供元素的下标即可。如果你不知道如何选择ArrayListLinkedList,就从这两个方面来考虑就行了。

     其实数组与链表无所谓谁更具有优势,这得要具体情况,所要实现的功能不同,它们所表现出来的优势就不一样,正所谓各有各的好处,只有知道了它们的特性,才能更好的利用它们···

 

转载:http://champion-netjava-163-com.iteye.com/blog/776956

分享到:
评论

相关推荐

    栈的数组实现方法

    该篇是ubuntu上用数组实现栈,里面包括了,其push pull clear display等操作,在调试的时候我想到了引用传递,但是编译不过所以改用了指针,大家可以再尝试一下传引用的方法。可能是我的文件头不对,所以编过的同学...

    856 数据结构(C语言版)-2015.zip

    在C语言版的数据结构中,我们通常会接触到数组、链表、栈、队列、树、图等各种基本数据结构,以及与它们相关的算法。武汉科技大学的856数据结构课程,特别是针对2015年的教学或考试内容,会深入讲解这些概念。 1. *...

    HashMap.pdf

    - JDK1.7中的HashMap基于数组+链表实现,插入元素时使用的是链表尾部插入。 - JDK1.8中,当链表长度达到8并且容量达到64时,链表会转换为红黑树,以优化搜索效率。当链表长度小于6时,树会转换回链表。如果容量...

    计算机课余资料(自己都忘了有啥了)

    数据结构与算法是提升程序效率的关键,资料可能讲解数组、链表、树、图、排序和搜索算法等,这些是解决复杂问题的基础。 计算机图形学可能涉及OpenGL、DirectX等库的使用,以及3D建模、渲染、动画等技术,对于游戏...

    第8讲 对比Vector、ArrayList、LinkedList有何区别1

    然而,它们在设计和性能上有着显著的区别。 首先,Vector是Java早期版本提供的线程安全的动态数组。这意味着在多线程环境下,它的所有操作都是线程安全的,但这也导致了额外的性能开销。Vector内部通过对象数组存储...

    HashMap在put数据时是如何找到要存放的位置的?.docx

    这是为了在跟数组长度一起做&与运算计算索引下标时,得到相对更加均匀分撒的结果,这样根据不同 key 得出的数组索引下标尽可能分撒的话,就不容易发生哈希碰撞,也就降低了一开始往 HashMap 中添加数据时链表的产生...

    数据结构复习总结(浙大陈越版)

    线性表可以用结构体数组或链表实现。结构体数组实现的线性表可以使用顺序存储方式,而链表实现的线性表可以使用链式存储方式。结构体数组实现的线性表的优点是访问元素速度快,但缺点是插入和删除元素时需要移动大量...

    sesvc.exe 阿萨德

    众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同。 Base 1.7 1.7 中的数据结构图: 先来看看 1.7 中的实现。 这是 HashMap 中比较核心的几个成员变量;看看分别是...

    iOS开发高级程序员面试题-答案.pdf,这是一份不错的文件

    知识点:数组和链表是两种不同的数据结构,数组元素在内存中连续存放,而链表元素在内存中不是顺序存储的。 3. 发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。而发送异步请求...

    LinkedList.pdf

    相比于数组实现的List,如ArrayList,LinkedList在头尾操作上具有更高的性能优势,但在随机访问方面性能较差,因为需要从头节点开始遍历链表以访问目标节点。 最后,由于文档内容是通过OCR扫描得到,因此在阅读和...

    《数据结构(C语言版)》书中光盘内容

    1. **数据结构的基本概念**:数据结构是计算机存储、组织数据的方式,包括数组、链表、栈、队列、树、图等。理解这些基本数据结构的特点和用途对于编程至关重要。 2. **C语言实现**:C语言是一种强大的系统级编程...

    一些java的小游戏项目,贪吃蛇啥的.zip

    这会用到数组、链表、栈、队列等基本数据结构,以及搜索、排序等算法。 6. **游戏逻辑** 游戏的核心是逻辑处理,比如贪吃蛇的移动规则、食物生成、碰撞检测等。开发者需要编写清晰的逻辑代码来确保游戏的正确运行...

    java8看不到源码-l33tc0de:我对Leetcode问题的解决方案!

    数组: 基础数学: 简单的字符串操作: 简单的按位操作: 哈希图和集合: 联合发现: 第 2 周 哈希映射和哈希集 多组 为此使用多重集。 您也可以不使用一个来解决它。 如何? 尝试通过两种方式解决它。 这两种解决...

    C#数据结构 与算法

    在编程领域,数据结构与算法是核心组成部分,对于C#开发者来说,理解并掌握这些概念至关重要。本文将深入探讨C#中的数据结构和算法,帮助你提升编程技能和解决问题的能力。 首先,我们要明白数据结构是组织和存储...

    计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西计算机大纲好的东西

    3. **数据结构**:这是计算机科学的核心部分,包括数组、链表、栈、队列、树(二叉树、平衡树)、图等,以及相关的操作,如排序算法(冒泡排序、快速排序、归并排序等)和查找算法(顺序查找、二分查找等)。...

    江南大学2018年计算机考研833初试大纲

    数据结构是算法设计的基础,包括数组、链表、栈、队列、树、图等。考生需要掌握它们的特性,了解插入、删除、查找等操作的时间复杂度,以及如何选择合适的数据结构来优化问题解决方案。 算法分析是衡量解决问题效率...

    2023蓝桥杯Java组A卷及答题地址.zip

    此外,深入理解数组、链表、栈、队列、树、图等数据结构以及排序和搜索算法(如冒泡排序、快速排序、二分查找)也是必不可少的。 测试地址.txt文件很可能是提供给参赛者进行在线答题或提交代码的网址。参赛者需要...

    数据结构期末考研复习题.docx

    - 示例:数组、链表等。 3. **非线性结构**:数据元素间存在多对多的关系。 - 示例:树、图等。 4. **逻辑结构与存储结构**: - **逻辑结构**:描述数据之间的逻辑关系,不考虑具体的存储方式。 - **存储结构*...

    数据结构1800例题与答案数据结构1800例题与答案

    数组提供了随机访问的优势,而链表则在插入和删除时更为灵活。 2. **树形结构**:包括二叉树、平衡树(如AVL树和红黑树)以及堆(如最大堆和最小堆)。这些结构广泛应用于搜索、排序和优先队列等场景。 3. **图...

    电子科技大学820数据结构总结.pdf

    这些表示的是算法运行时间与输入规模之间的关系,其中O(1)代表常数时间,O(logn)是对数时间,O(n)线性时间,O(nlogn)是对数线性时间,而O(n^2)及以上则代表更复杂的算法,时间随着数据量增加迅速增长。 链表是一种...

Global site tag (gtag.js) - Google Analytics