Java-数组和链表(ArrayList和LinkedList)
一、数组和链表
1、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组
中任何元素。
但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要
增加的元素放在其中。
同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。
如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。
2、链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系
到一起
比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。
如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。
但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。
如果应用需要经常插入和删除元素你就需要用链表数据结构了。
在Java中数组比较代表性的就是ArrayList(底层数组),链表比较代表性的就是LinkedList(底层双向链表)
二、ArrayList和LinkedList
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)相关推荐
- JAVA集合一:ArrayList和LinkedList
JAVA集合一:ArrayList和LinkedList 参考链接: HOW2J.CN 前言 这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList.LinkedList.HashMap. ...
- 【重难点】【Java集合 03】ArrayList、LinkedList、 Vector 和 Stack 的区别、CopyOnWriteArrayList
[重难点][Java集合 03]ArrayList.LinkedList 和 Vector 的区别.util 包下的 List.CopyOnWriteArrayList 文章目录 [重难点][Java ...
- java集合框架05——ArrayList和LinkedList的区别
前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...
- Java谣言终结者之Arraylist和Linkedlist到底谁快
Arraylist和Linkedlist是我们常用的两个集合类,他们都是实现了list接口并且都可以序列化,此外实现了list接口的还有vector和stack.这里我们暂时不做讨论.Arraylis ...
- Java 对比Vector、ArrayList、LinkedList
①引言 在日常生活中能高效的管理和操作数据是非常重要的.Java提供了强大的集合框架,大大提高了开发者的生产力,今天就了解一下有关集合框架方面的问题. Vector.ArrayList.LinkedL ...
- java集合框架之ArrayList与LinkedList的区别
参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedL ...
- java数组和链表区别
在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据.那么这种结构的数据,在内存中是怎么存放的呢? 数组的结构示意图正如上图所示,数组在内存中是一段连续的存储单元,每个数据依次放在 ...
- java数组和链表的区别_java中链表和数组的区别?
综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...
- java数组和链表查询效率及增删效率比较
相比链表而言,数组的查找速度快,但是增删速度比较慢 数组查找速度比较快的原因:数组结构在堆内存中存放的位置是连续的,链表结构位置则是分散的,通过指针来指向下一个数据节点的位置.当进行查询操作时,数组结 ...
- java数组和链表6_java的数组和链表从熟系到陌生
s[1][2] = 26; 数组实现数据结构: 数据结构的作用:模拟生活中的数据存储:对数据进行增删改查 和数据库的区别 对该同学信息进行增删改查 数据库是把数据存到磁盘里面,他支持可调定式 电脑存数 ...
最新文章
- 真香 | 有了这个神器,学习 Vim 终于不难了!
- python with open as yaml_python怎么解析yaml文件?
- 虚拟化技术的概述及使用
- springBoot中启用事务管理
- C++初始编程及相关的问题总结
- 利用命令来打开所有程序,这个装逼给满分!
- 计算机辅助设计受力分析,假肢接受腔的受力分析和计算机辅助设计
- [51nod1773]A国的贸易
- 小熊的人生回忆(二)
- (转)API接口防止参数篡改和重放攻击
- RabbitMQ 开启WEB管理
- [补档]noip2019集训测试赛(九)
- std::thread的使用
- neo4j︱neo4j批量导入neo4j-import (五)
- 5 年 Java 面试大厂遭淘汰,面试官:连这个源码都不懂
- php 库下载,远程文件下载php类库
- haneWIN NFS Server|haneWIN NFS Server(优秀NFS服务器)V1.2.16官方版-绿色下载吧
- 消息队列——MQ(Message Queue)
- 分辨率、帧速率、码流、采样位深、采样率、比特率
- 【有利可图网】PS教程:设计制作一颗超逼真的精致透明玻璃球!
热门文章
- 电路交换与分组交换的差别
- css-loader,less-loader,url-loader,babel-loader的安装及其配置
- html网页在不同尺寸屏幕大小,移动端h5页面不同尺寸屏幕适配方法
- 全基因组关联分析(GWAS)软件:gemma
- matlab读取八叉树,基于八叉树表示的三维栅格地图路径规划系统及方法技术方案...
- Twig模板引擎常用基础用法总结
- Android性能专项测试之GPU Monitor
- 2015河北省对口计算机试题,2015河北省对口高考计算机理论考试试题及答案
- artifactIdspring-boot-starter/artifactId
- sqlserver 数据库自动备份