Collection-LinkedList

1.LinkedList基本说明:
  • 1).LinkedList底层实现了双向链表和双端队列的特点

  • 2).可以添加任意元素(元素可以重复,包括null)

  • 3).线程不安全,没有实现同步和互斥

在这里插入图片描述

2.LinkedList的 底层操作机制
  • 1).LinkedList底层维护了一个双向链表

  • 2).LinkedList中维护了两个属性first和last分别指向首节点和尾结点

  • 3).每个节点(Node对象),里面又维护了prev/next/item三个属性,其中通过prev指向前一个,通过next指向后一个节点,最终实现双向链表

  • 4).所以LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高,不涉及数组的扩容

  • 5).双向链表走向图

在这里插入图片描述

  • 底层代码分析

    List list = new LinkedList()
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

解读:
1.new Linkedlist() 底层会构建一个无参构造函数
2.add(“1”) 会调用一个linklast函数,返回一个Boolean值,为true
3.linkLast()
3.1 声明一个node节点L,将listedlist 中last 节点 赋值给L 如果 linkedList 为 null 的话 last 也为 null ,不为null 的话,last指向上一个节点
3.2 声明一个新节点,将 L 的节点 赋值给 newNode 新节点中prev对象中的item,然后将新节点的尾部设置为null
3.3 判断 如果 last 节点 为null的话, 设置为首节点也叫第一个节点, 如果不为null的将新节点赋值给last对象中的next的item属性然后size++ , 最后 修改次数modCount++

3.ArrayList和LinkedList比较

在这里插入图片描述

如何选择ArrayList和linkedList:

  1. 如果我们改查的操作多,选择ArrayList
  2. 如果我们增删的操作多,选择LinkedList
  3. 一般来说,在程序中80%-90%都是查询,因此大部分情况下会选择ArrayList
  4. 在一个项目中,根据业务灵活选择,也可能这样,一个模块使用的是ArrayList,另一个模块是LinkedList
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值