peek

C#队列学习笔记:队列(Queue)和堆栈(Stack)

蓝咒 提交于 2020-04-12 09:01:32
原文: C#队列学习笔记:队列(Queue)和堆栈(Stack) 一、队列(Queue) 1.1、概念 队列(Queue)代表了一个 先进先出 的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为 入队 ,当您从列表中移除一项时,称为 出队 。 1.2、Queue类的属性 下表列出了Queue类的一些常用的属性: 属性 描述 Count 获取 Queue 中包含的元素个数。 1.3、Queue类的方法 下表列出了Queue类的一些常用的方法: 序号 方法名 & 描述 1 public virtual void Clear(); 从 Queue 中移除所有的元素。 2 public virtual bool Contains( object obj ); 判断某个元素是否在 Queue 中。 3 public virtual object Dequeue(); 移除并返回在 Queue 的开头的对象。 4 public virtual void Enqueue( object obj ); 向 Queue 的末尾添加一个对象。 5 public virtual object[] ToArray(); 复制 Queue 到一个新的数组中。 6 public virtual void TrimToSize(); 设置容量为 Queue 中元素的实际个数。

队列

点点圈 提交于 2020-04-08 14:34:53
队列 队列是用数组或链表实现的,遵循先进先出规则的一个有序列表 使用数组模拟队列 public class ArrayQueue<T> { private Object[] arr; private int front; private int rear; private int capacity; public ArrayQueue() { this.capacity=10; this.front=-1; this.rear=-1; this.arr=new Object[this.capacity]; } public ArrayQueue(int capacity) { this.capacity=capacity; this.front=-1; this.rear=-1; this.arr=new Object[this.capacity]; } public boolean add(T t) { if(this.rear<this.capacity-1) { this.arr[++rear]=t; return true; } throw new RuntimeException("队列已满!"); } public T remove() { if(this.rear==this.front) { throw new RuntimeException("队列为空

七种阻塞队列

試著忘記壹切 提交于 2020-04-06 18:16:55
   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。   使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。 一. 什么是阻塞队列    阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。   1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。   2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。   阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。 1.非阻塞队列中的几个主要方法:   add(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则会抛出异常;   remove():移除队首元素,若移除成功,则返回true

Stack源码解析

只谈情不闲聊 提交于 2020-04-06 13:39:59
Stack介绍 Stack(栈),它具有先进后出的特性 1、Stack的源码结构 public class Stack<E> extends Vector<E> { public Stack() { } }  Stack继承了Vector,而Vector又是线程安全的ArrayList,所以底层仍然是数组。 2、入栈操作 public E push(E item) { // 直接调用了Vector.addElement addElement(item); return item; } //Vector.addElement public synchronized void addElement(E obj) { modCount++; //扩容, ensureCapacityHelper(elementCount + 1); //存放值到最后一位 elementData[elementCount++] = obj; }  入栈操作就是将数据添加到数组最后一位  3、查看站点元素 public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); //获取数组最后一位数据 return elementAt(len - 1); }    4、出栈操作 public

leetcode 42 接雨水

梦想与她 提交于 2020-04-06 10:28:14
原题点这里 这个题刚开始看,一点思路也没有呀。。。。然后就迫不及待的看了题解。也不知道什么时候能积累出量变 这个题虽然标记为困难,但是其实不难。最简单的办法,我们计算每个位置的储水量:Min(maxL,maxR)-height[i] 我们在计算i位置上的储水量,分别向左向右找到最大值即可。 124ms public static int trap( int [] height) { int len = height.length; if (len <= 2) return 0 ; int ans = 0 ; for ( int i = 1; i < len - 1; i++ ) { int maxLeft = 0 ; int maxRight = 0 ; for ( int j = i - 1; j >= 0; j-- ) { maxLeft = Math.max(maxLeft, height[j]); } for ( int j = i + 1; j < len; j++ ) { maxRight = Math.max(maxRight, height[j]); } int cur = Math.min(maxLeft, maxRight) - height[i]; ans += cur > 0 ? cur : 0 ; } return ans; } View Code

Mac OSX Lion Sneak Peek

与世无争的帅哥 提交于 2020-04-05 19:25:35
老乔没有停止MacOSX的步伐,决定2011年夏季继续操作系统的升级。加入了ipod touch,iphone亦或ipad等的滑屏等IOs样式,先来看看历来的MacOS的命名好了: Mac OS X 10.0 - Cheetah Mac OS X 10.1 - Puma Mac OS X 10.2 - Jaguar Mac OS X 10.3 - Panther Mac OS X 10.4 - Tiger Mac OS X 10.5 - Leopard Mac OS X 10.6 - Snow Leopard We took our best thinking from Mac OS X and brought it to the iPhone. Then we took our best thinking from the iPhone and brought it to iPad. And now we’re bringing it all back to the Mac with our eighth major release of the world’s most advanced operating system. Mac OS X Lion arrives in summer 2011. Here’s a sneak peek at just a few of its

并发容器学习—ArrayBlockingQueue

…衆ロ難τιáo~ 提交于 2020-03-25 02:00:29
3 月,跳不动了?>>> 一、ArrayBlockingQueue并发容器 1.ArrayBlockingQueue的继承体系 见名知义,ArrayBlockingQueue是个由数组支持的有界阻塞队列。也遵循先进先出(FIFO)的原则,也就是说ArrayBlockingQueue的容量是有限的,并不能像ArrayList那样自动扩容。ArrayBlockingQueue的继承关系如下图所示: 其中除了BlockingQueue接口未接触过,其余的类和接口都已经分析过,不在赘言。 public interface BlockingQueue<E> extends Queue<E> { //将指定的元素添加到队尾,若队列容量已满,则抛异常 boolean add(E e); //将指定的元素添加到队尾,若队列容量已满,那么放弃添加,返回false boolean offer(E e); //将指定的元素添加到队尾,若队列已满,那么等待队列有容量时在添加 //可被中断 void put(E e) throws InterruptedException; //在一定时间内尝试将指定元素添加到队尾,若超过指定时间仍未添加成功, //则放弃添加,返回false boolean offer(E e, long timeout, TimeUnit unit) throws

Java集合源码分析之Queue(一):超级接口Queue_一点课堂(多岸学院)

纵然是瞬间 提交于 2020-03-22 16:07:35
3 月,跳不动了?>>> 在日常生活中,排队几乎随处可见,上地铁要排队,买火车票要排队,就连出门吃个大餐,也要排队。。。之前研究的 ArrayList 就像是一个缺乏管理的排队系统。大家虽然会排队,但一会走个人,大家向前挪一挪,一会插个人,大家向后挪一挪,碰到这样的队伍,一定让人痛苦万分吧? 今天要介绍的 Queue 就不同了,它是一个严格的排队系统。就像许多火车站排队窗口在两侧加了护栏一样,大家只能从队尾进来,从队首离开,我们称之为 FIFO(first in first out) ,也就是先进来的人先离开。 Queue 就严格遵循了这个原则,使插队和提早离开变得不可能。 当然 Queue 也有很多变种, FIFO 并不是其可以遵循的唯一规则。比如 Stack (栈),就遵循 LIFO(last in first out) ,这就好比我们叠碗一样,后来者居上。还有我们之后要分析的 Deque ,其允许元素从两端插入或删除,比如排队进站时总有人说,“我能不能插个队,我赶时间?”。 超级接口Queue 队列在软件开发中担任着重要的职责,java函数的调用用到了栈的技术,在处理并发问题时, BlockingQueue 很好的解决了数据传输的问题。接下来我们看看Java是如何定义队列的吧。 首先, Queue 也继承自 Collection ,说明它是集合家族的一员。 Queue

155 最小值栈

久未见 提交于 2020-03-06 17:34:58
【题目】 【分析】 一般的栈就具有push()、pop()、top()的功能。getMin()的功能如何在常数时间内实现呢? 如果查找的话,至少是线性时间。不符合要求。 【方法一】 使用一个辅助栈,用来保存当前栈中的最小值。执行getMin()操作时,返回辅助栈的栈顶元素即可。 代码: class MinStack { Stack < Integer > dataStack ; Stack < Integer > minStack ; public MinStack ( ) { dataStack = new Stack ( ) ; minStack = new Stack ( ) ; } public void push ( int x ) { dataStack . push ( x ) ; if ( minStack . empty ( ) == true || minStack . peek ( ) > x ) { minStack . push ( x ) ; } else { minStack . push ( minStack . peek ( ) ) ; } } public void pop ( ) { dataStack . pop ( ) ; minStack . pop ( ) ; } public int top ( ) { return

Java中的容器 I————浅谈Queue和PriorityQueue

杀马特。学长 韩版系。学妹 提交于 2020-03-06 07:09:14
一.Queue的实现 通过LinkedList类实现Queue接口来完成对Queue的实例类的实现,代码如下: Queue<Integer> queue=new LinkedList<>();//linkedList实现了Queue接口,将其向上转型为队列 二.Queue的方法 1.offer————加入元素(加入至队尾) queue.offer(2);//使用offer将元素插入队尾 2.remove,poll————返回头结点并删除元素 区别remove方法在队列为空时将抛出异常,而poll将返回null queue.remove();//remove poll 返回头结点并移除 remove在空时抛出异常 但是poll返回null 3.element,peek ————返回头结点,不删除元素 区别element方法在队列为空时将抛出异常,而peek 将返回null queue.peek();//删除头结点peek/element都是返回队头但是不移除队头,但是peek在没有元素时返回null element抛出异常 三.PriorityQueue队列(优先级队列)的实现 注意点: 在实现了comparator接口的类可以 在 PriorityQueue队列中调用offer方法 实现排序 代码如下: PriorityQueue<Integer> pque=new