JAVA中数组与链表的区别

数组和链表是两种不同的数据存储方式
比较项数组链表
逻辑结构(1)数组在内存中连续; (2)使用数组之前,必须事先固定数组长度,不支持动态改变数组大小;(3) 数组元素增加时,有可能会数组越界;(4) 数组元素减少时,会造成内存浪费;(5)数组增删时需要移动其它元素(1)链表采用动态内存分配的方式,在内存中不连续 (2)支持动态增加或者删除元素 (3)需要时可以使用malloc或者new来申请内存,不用时使用free或者delete来释放内存
内存结构数组从栈上分配内存,使用方便,但是自由度小链表从堆上分配内存,自由度大,但是要注意内存泄漏
访问效率数组在内存中顺序存储,可通过下标访问,访问效率高链表访问效率低,如果想要访问某个元素,需要从头遍历
适用场景当线性表的操作主要是进行查找,很少插入和删除时或者当要求存储的大小变化不大时,且可以事先确定大小,宜采用数组结构链表插入、删除效率高,当线性表要求频繁插入和删除时或者当要求存储的长度变化较大时,且事先无法估量数据规模,,宜采用链表结构
arraylist和linkedlist的区别
比较项ArrayListLinkedList
底层数据结构ArrayList基于动态数组实现,内部维护一个Object数组,默认初始容量为10,当元素数量超过当前容量时会自动扩容。LinkedList基于双向链表实现,每个节点包含数据元素和指向前后节点的引用。
访问效率由于基于数组,ArrayList支持通过索引快速访问元素,时间复杂度为O(1)。所以随机访问效率高由于基于链表,LinkedList不支持随机访问,需要从头或尾开始遍历,时间复杂度为O(n)。所以顺序访问效率低
插入和删除效率在中间或开头插入/删除元素时,需要移动后续元素,时间复杂度为O(n)。所以插入和删除效率低在任意位置插入/删除元素时,只需调整相邻节点的引用,时间复杂度为O(1)。插入和删除效率
适用场景需要频繁进行随机访问操作,适合随机访问适合频繁插入和删除
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值