01.源码阅读-queue接口-LinkedList类

一.阅读技巧

查看接口的实现类:Ctrl+Alt+B
返回上/下个光标地方:Ctrl+Alt+左箭头和 Ctrl+Alt+右箭头
查看Java方法调用树(被调/主调):Ctrl+Alt+H
查看类继承关系图:Ctrl+Alt+U
查看当前类的继承树:Ctrl+H
查看定义的变量在哪里被调用:Ctrl+Alt+F7
查看一个类中有什么方法:Alt+7

二.关于java集合

关于java集合有两大块一块是collection接口和Map接口,
(1)其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合; 而ArrayList和 LinkedList 实现了List接口,HashSet实现了Set接口,这几个都比较常用;
(2)HashMap 和HashTable实现了Map接口,并且HashTable是线程安全的,但是HashMap性能更好;
在这里插入图片描述
其实上面除了常用的list接口和set接口以外,可以看到下图queue接口也是继承了collection。
在这里插入图片描述

三.关于Queue接口

(1)可以看出queue接口由下面六个类或者接口继承,其中我们常用的util中的LinkedList类是由Deque接口继承。
在这里插入图片描述
(2)Linkedlist类同时继承了list接口和间接继承了Queue接口。
在这里插入图片描述
(3)一般队列有两个常用操作offer和poll,下面具体看下实现。
首先看offer,offer返回add的方法,其传入参数是E类型的参数,也就是建立实例化对象传入的泛型参数。

在这里插入图片描述
在这里插入图片描述
这时候就有疑问了为什么要多此一举多用一个方法,明明有add就够了,要offer干嘛?
我觉得是因为这个类本身继承了list和queue,而offer是属于queue的方法,list是list的方法,所以这样就可以具体使用某种类型的时候具体用其中的一套方法。使用的时候看应用场景。
作为list使用时,一般采用add / get方法来 加入/获取对象
作为queue使用时,才会采用 offer/poll/take等方法。
add由下面的方法实现,这样就很清楚了,每增加一个就新增一个Node,而这个Node就是一个节点,有前驱节点和后期节点,这样add就可以将其以链表的形式进行添加。
在这里插入图片描述
在这里插入图片描述
接着看poll,poll就是如果头节点是空的返回null,头节点不为空跳入另一个函数unlinkFirst,这个函数很简单就是链表删除头节点,就是将原来的头节点的item也就是存到值取出来返回,然后将他脱离整体的链表,再把原来的next节点设置为头节点,让first等于这个next节点,并且让这个first的前驱节点为空,然后长度变量减小。
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LinkedList是一种基于双向链表的List数据结构。它的内部实现源于对链表的操作,所以适用于频繁增加和删除元素的情况。LinkedList的创建可以通过构造器来完成,而往LinkedList中添加对象可以使用add方法。LinkedList不是线程安全的,并且查询元素的效率相对较低,因为需要一个一个遍历链表来查找元素。LinkedList实现Queue接口,所以它既可以作为队列使用,也可以作为栈使用。此外,LinkedList实现了Deque接口,即双端队列。与ArrayList相比,LinkedList的内部结构有所不同,LinkedList继承自AbstractSequentialList,然后再继承自AbstractList。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [第三章 LinkedList源码解析1](https://download.csdn.net/download/weixin_35760849/86324281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [LinkedList源码解析](https://blog.csdn.net/qq_38826019/article/details/115677359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值