数据结构之LinkedList与链表

1.ArrayList的缺陷

1.ArrayList底层使用数组来存储元素,由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。
2.链表

2.1 链表的概念及结构

链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。

链表的种类:1.单向或者双向链表

2.带头或者不带头节点

3. 循环或者非循环

面试重点:单向不带头链表和双向不带头循环链表

2.2 LinkedList链表

LinkedList的底层是双向链表结构(链表后面介绍),由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。

在集合框架中,LinkedList实现了List接口。

1. LinkedList实现了List接口
2. LinkedList的底层使用了双向链表
3. LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问
4. LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)
2.2.1  LinkedList的使用

public static void main(String[] args) {
// 构造一个空的LinkedList
     List<Integer> list1 = new LinkedList<>();
     List<String> list2 = new java.util.ArrayList<>();
     list2.add("JavaSE");
     list2.add("JavaWeb");
     list2.add("JavaEE");
     // 使用ArrayList构造LinkedList
     List<String> list3 = new LinkedList<>(list2);
}

3.ArrayList和LinkedList的区别(从共性出发看)

不同点ArrayList(底层为数组)LinkedList
存储空间上物理上一定连续逻辑上连续,物理上分配的空间可能不连续
随机访问其中元素(时间复杂度)支持O(1)不支持:O(N)
头部插入元素需要挪移元素,效率低O(N)只需修改引用的指向,时间复杂度为O(1)
插入元素空间不够时需要扩容没有容量的概念
应用场景元素高效存储+频繁访问任意位置插入和删除频繁

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值