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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值