00:00
下面要给他讲的也是我们sequence这个内容啊,就是呃,线性线性序列的啊。那么叫Q,这是队列,那队列的应用场景,我在上午的时候呢,已经给他举了一个,比如说最经典的就是银行排队。那除了这种这种应用场景,还有很多场景,你比如说你们在学Java的时候,老师已经讲过,当我们并发的时候,遇到这个,呃,就是SNCH,就是叫做同步的时候呢,如果有多个线程来访问,就会进入到一个队列进行等待,是吧?哎,像这种缓冲,你们将来自己都会去设计这种。缓冲池,那缓冲池最经典的呢,就是队列游戏做的比较高级一点的呢,就是队列里面加优先级,比如说大家都在排队。啊有,比如说你这有很多并发的任务是吧,一个一一个调度任务,一个job,那么哪个job的优先级高,还有一个说法,那你会写一段调度代码,就是算法一个调度代码,那如果说在优先级相同的情况下呢,我就从这个队列。
01:15
提一个东西出来,如果在,呃,大家都在排队,但是你的优先级高呢,我可以先调你就好像。哎,咱们这个大家上厕所排队上厕所是吧,有一个人实在是很着急,现在先先上去解决是吧,他优先级比较高,不然的话,这个弄到裤子里面也很麻烦的事,好这个呢,其实很有意思,就是你们学到后面呢,你发现呃,这些结合也好,这数据结构也好,其实跟我们他能解决很多现实生活中的问题。好,那么这个队列是什么样子呢?我们来看一下啊,那现在我们看一下队列。好,首先我们对大家说一个序列队列的一个基本说明,第一个序列是一个有序列表啊,既然是有序,呃,那么它在底层的实现呢,像这种数组或者是链表的结构来实现啊,就是有些是数组或者是有些是链表。
02:09
啊,有些速度,有些念表,就看他底层的一个机制,然后呢,他遵守的一个最基本的原则是先入先出,啊,理论上就是先入先出,当然这个呢,没有带优先级,有些高级的队列呢,带优先级,那这个先入先出还得加一个附加条件,就是在同等优先级的情况下。对啊,那么即先存入队列的数据要先取出来,后存入的要后取出来,你可以想象成这样一个结构啊,你可以想象成在内存里面有这样一个结构。他呢,是。假设是一个链表,就是这样一个一个一个一个一个的节点。一个一个节点,那么这个地方呢,指向他屁股后边,这个指向他屁股后边,然后呢,这有一个节点也指向他屁股后边,最后呢,有个尾节点,用什么来指呢?用那个空来表示,这是一个尾节点,前面呢有个头节点叫亥的节点。
03:12
哎,那么运调用的时候呢,我先找到这个头节点啊,取的时候先把这个取出来,取出来过把它扔出去,扔出去过后呢,让这个头节点指向下一个节点,那这个节点就成为一个什么呢?成为一个垃圾被回收。那下一次再取呢,又把这个取出来,让这个头节点指向下一个节点,这样子就一直。啊,那如果我在加入一个节点的时候呢,我是从这个头节点先变离到屁股后边,再把这个屁股后面这个空指向这个新的节点,就大致是这样子的啊用链表可以这样实现,用队列。用数组来实现这个队列呢,我也讲过啊,这在构圆里面讲过,它也非常有意思,这个队列呢,为了为了节省呢,可以做成一个环形,用数组来形成一个环形队列,那那也非常有意思啊,就是这个环状的一个队列,这个也是一个小算法在里边。
04:09
好,嗯,这个呢,因为我们今天讲的呢,是应用这个层面上的,说他底层实现我就先不讲了,如果有兴趣的同学呢,后面我再分享一点那个视频,你愿意去看就再看啊好,第二个在开中由设计者直接给我们提供队列,你直接拿来用,但这个队列呢,有可能呃,在特殊的情况下不能满足我们开发需求呢,还得自己去写。好在scale里面呢,这个队列有两种,一有两种,第一种呢是mutable这个包包下面的队列就是可变队列,还有一种队列是imutable,是不可变队列,那当然了,我这说了一句话啊。一般来讲呢,我们在开发中通常使用的是可变集合中的队列,举个例子,大家看这里。我在这儿输入一个Q。
05:03
好,同学们可以看到这个Q呢,这有一个Q这是不可变的,还有一个Q是可变的,那一般来讲我们用的是可变的这种队列,为什么你你队列不能变化,那意义就不大了,对吧,它固定下来,你意义肯定是不是特别大啊,除非你真的有这个需求,好队列的基本说明就说到这儿,那么我们先截取一段视频。
我来说两句