一、数组和链表

1、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组

中任何元素。

但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要

增加的元素放在其中。

同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。

如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。

2、链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系

到一起

比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。

如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。

但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。

如果应用需要经常插入和删除元素你就需要用链表数据结构了。

在Java中数组比较代表性的就是ArrayList(底层数组),链表比较代表性的就是LinkedList(底层双向链表)

二、ArrayListLinkedList

1、 ArrayList和LinkedList的差别主要来自于Array和LinkedList数据结构的不同。

ArrayList是基于数组实现的

LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机

访问集合中的元素,除此之外,LinkedList还实现了Deque接口,Deque接口是Queue接口的子接

口,它代表一个双向队列,因此LinkedList可以作为双向队列 ,栈(可以参见Deque提供的接口方

法)和List集合使用,功能强大。

2、因为Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的,可

以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。

Array获取数据的时间复杂度是O(1),但是要插入、删除数据却是开销很大的,因为这需要移动数组

中插入位置之后的的所有元素。

3、 相对于ArrayList,LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中找到要

index的位置,再返回;但在插入,删除操作是更快的。

因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有

的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList

中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引(除了插入数组的尾

部)。

4.、LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的

每个节点中存储的是实际的数据和前后节点的位置。

Java-数组和链表(ArrayList和LinkedList)相关推荐

  1. JAVA集合一:ArrayList和LinkedList

    JAVA集合一:ArrayList和LinkedList 参考链接: HOW2J.CN 前言 这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList.LinkedList.HashMap. ...

  2. 【重难点】【Java集合 03】ArrayList、LinkedList、 Vector 和 Stack 的区别、CopyOnWriteArrayList

    [重难点][Java集合 03]ArrayList.LinkedList 和 Vector 的区别.util 包下的 List.CopyOnWriteArrayList 文章目录 [重难点][Java ...

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

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

  4. Java谣言终结者之Arraylist和Linkedlist到底谁快

    Arraylist和Linkedlist是我们常用的两个集合类,他们都是实现了list接口并且都可以序列化,此外实现了list接口的还有vector和stack.这里我们暂时不做讨论.Arraylis ...

  5. Java 对比Vector、ArrayList、LinkedList

    ①引言 在日常生活中能高效的管理和操作数据是非常重要的.Java提供了强大的集合框架,大大提高了开发者的生产力,今天就了解一下有关集合框架方面的问题. Vector.ArrayList.LinkedL ...

  6. java集合框架之ArrayList与LinkedList的区别

    参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedL ...

  7. java数组和链表区别

    在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据.那么这种结构的数据,在内存中是怎么存放的呢? 数组的结构示意图正如上图所示,数组在内存中是一段连续的存储单元,每个数据依次放在 ...

  8. java数组和链表的区别_java中链表和数组的区别?

    综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...

  9. java数组和链表查询效率及增删效率比较

    相比链表而言,数组的查找速度快,但是增删速度比较慢 数组查找速度比较快的原因:数组结构在堆内存中存放的位置是连续的,链表结构位置则是分散的,通过指针来指向下一个数据节点的位置.当进行查询操作时,数组结 ...

  10. java数组和链表6_java的数组和链表从熟系到陌生

    s[1][2] = 26; 数组实现数据结构: 数据结构的作用:模拟生活中的数据存储:对数据进行增删改查 和数据库的区别 对该同学信息进行增删改查 数据库是把数据存到磁盘里面,他支持可调定式 电脑存数 ...

最新文章

  1. 真香 | 有了这个神器,学习 Vim 终于不难了!
  2. python with open as yaml_python怎么解析yaml文件?
  3. 虚拟化技术的概述及使用
  4. springBoot中启用事务管理
  5. C++初始编程及相关的问题总结
  6. 利用命令来打开所有程序,这个装逼给满分!
  7. 计算机辅助设计受力分析,假肢接受腔的受力分析和计算机辅助设计
  8. [51nod1773]A国的贸易
  9. 小熊的人生回忆(二)
  10. (转)API接口防止参数篡改和重放攻击
  11. RabbitMQ 开启WEB管理
  12. [补档]noip2019集训测试赛(九)
  13. std::thread的使用
  14. neo4j︱neo4j批量导入neo4j-import (五)
  15. 5 年 Java 面试大厂遭淘汰,面试官:连这个源码都不懂
  16. php 库下载,远程文件下载php类库
  17. haneWIN NFS Server|haneWIN NFS Server(优秀NFS服务器)V1.2.16官方版-绿色下载吧
  18. 消息队列——MQ(Message Queue)
  19. 分辨率、帧速率、码流、采样位深、采样率、比特率
  20. 【有利可图网】PS教程:设计制作一颗超逼真的精致透明玻璃球!

热门文章

  1. 电路交换与分组交换的差别
  2. css-loader,less-loader,url-loader,babel-loader的安装及其配置
  3. html网页在不同尺寸屏幕大小,移动端h5页面不同尺寸屏幕适配方法
  4. 全基因组关联分析(GWAS)软件:gemma
  5. matlab读取八叉树,基于八叉树表示的三维栅格地图路径规划系统及方法技术方案...
  6. Twig模板引擎常用基础用法总结
  7. Android性能专项测试之GPU Monitor
  8. 2015河北省对口计算机试题,2015河北省对口高考计算机理论考试试题及答案
  9. artifactIdspring-boot-starter/artifactId
  10. sqlserver 数据库自动备份