zoukankan      html  css  js  c++  java
  • Queue接口——高淇JAVA300讲笔记之其他容器

    • Queue:单向
      • 队列通常FIFO(先进先出)
      • 优先级队列和堆栈LIFO(后进先出) 

        抛出异常  特殊值

    插入  add(e)           offer(e)

    移除  remove()       poll()

    获取  element()      peek()


    • Deque:双向 两端访问

      全名double-ended queue,是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

      1、此接口扩展了Queue接口,在将双端队列用作队列时,将得到FIFO(先进先出)行为

      2、可用作LIFO(后进先出)堆栈


    案例一:使用队列模拟银行存款业务

     1 package com.bjsxt.others.que;
     2 
     3 import java.util.ArrayDeque;
     4 import java.util.Queue;
     5 
     6 /**
     7  * 使用队列模拟银行存款业务
     8  *
     9  */
    10 public class Demo01 {
    11     public static void main(String[] args) {
    12         Queue<Request> que = new ArrayDeque<Request>();
    13         //模拟排队情况
    14         for(int i=0;i<10;i++) {
    15             final int num = i;  //匿名内部类对象只能访问final修饰的变量
    16             que.offer(new Request() {
    17                 
    18                 @Override
    19                 public void deposit() {
    20                     System.out.println("第"+num+"个人,办理存款业务,存款额度为:"+(Math.random()*10000));
    21                 }
    22             });
    23         }
    24         
    25         dealWith(que);
    26         
    27     }
    28     //处理业务
    29     public static void dealWith(Queue<Request> que) {
    30         Request req = null;
    31         while(null != (req=que.poll())) {
    32             req.deposit();
    33         }
    34     }
    35 }
    36 
    37 interface Request{
    38     //存款
    39     void deposit();
    40 }

    运行结果:

    第0个人,办理存款业务,存款额度为:9161.997129099092
    第1个人,办理存款业务,存款额度为:5583.8986325147125
    第2个人,办理存款业务,存款额度为:6777.270259656995
    第3个人,办理存款业务,存款额度为:9488.415995041527
    第4个人,办理存款业务,存款额度为:2076.1692681219834
    第5个人,办理存款业务,存款额度为:6296.16078836921
    第6个人,办理存款业务,存款额度为:1778.08272104238
    第7个人,办理存款业务,存款额度为:5271.919761422389
    第8个人,办理存款业务,存款额度为:8782.338403081516
    第9个人,办理存款业务,存款额度为:628.3618807054859

    案例二:使用队列实现自定义堆栈

    先写一个自定义的堆栈类,具有压栈、弹栈、获取方法。

     1 package com.bjsxt.others.que;
     2 
     3 import java.util.ArrayDeque;
     4 import java.util.Deque;
     5 
     6 /**
     7  * 使用队列实现自定义堆栈
     8  * 1、弹
     9  * 2、压
    10  * 3、获取头
    11  *
    12  */
    13 public class MyStack<E> {
    14     //容器
    15     private Deque<E> container = new ArrayDeque<E>();
    16     //容量
    17     private int cap;
    18     public MyStack(int cap) {
    19         super();
    20         this.cap = cap;
    21     }
    22     
    23     //压栈
    24     public boolean push(E e) {
    25         if(container.size()+1>cap) {
    26             return false;
    27         }
    28         return container.offerLast(e);
    29     }
    30     //弹栈
    31     public E pop() {
    32         return container.pollLast();
    33     }
    34     //获取
    35     public E peek() {
    36         return container.peekLast();
    37     }
    38     
    39     public int size() {
    40         return this.container.size();
    41     }
    42 }

    然后测试一下这个堆栈:

     1 package com.bjsxt.others.que;
     2 
     3 /**
     4  * 测试自定义堆栈
     5  *
     6  */
     7 public class Demo02 {
     8     public static void main(String[] args) {
     9         MyStack<String> backHistory = new MyStack<String>(3);
    10         backHistory.push("www.baidu.com");
    11         backHistory.push("www.google.com");
    12         backHistory.push("www.sina.com");
    13         backHistory.push("www.bjsxt.cn");
    14         
    15         System.out.println("大小:"+backHistory.size());
    16         
    17         //遍历
    18         String item = null;
    19         while(null != (item=backHistory.pop())) {
    20             System.out.println(item);
    21         }
    22     }
    23 }

    运行结果:

    大小:3
    www.sina.com
    www.google.com
    www.baidu.com
  • 相关阅读:
    python自学第13天 hashlib,re模块
    python自学第12天 模块
    python自学第12天 模块定义,导入,内置模块
    python自学第11天-单线程并发、迭代器,序列化,获取路径
    python自学第10天,生成器
    python自学第9天,装饰器
    python自学第8天,变量,递归
    python自学第7天,函数,参数
    彻底搞懂Session与Cookie的异同!
    你真的搞懂了Java中的<<、>>、>>>运算符嘛?
  • 原文地址:https://www.cnblogs.com/swimminglover/p/8326083.html
Copyright © 2011-2022 走看看