java实现队列及队列的应用
来源:互联网 发布:每年车祸数据统计 编辑:程序博客网 时间:2024/04/30 16:52
package Queue;import java.util.LinkedList;public class Queue {//队列是先进先出//队尾插入数据//队头删除数据LinkedList linkList = new LinkedList();public void put(Object object){linkList.addLast(object);}public boolean isEmpty(){return linkList.isEmpty();}public Object get(){if(!linkList.isEmpty()){return linkList.removeFirst();}else{return linkList.isEmpty();}}public int getSize(){return linkList.size();}public void clear(){linkList.clear();}}
1.利用队列的保存顺序特性,模拟售票口
考虑去银行办业务:一般来说,服务窗口越多,队走的越快,银行经理希望顾客满意,但又不希望雇佣过多的员工。
我们模拟的服务窗口有如下假设:
1.只排一队,并且先到的人先得到服务(这是一个队列)
2.平均每隔15秒就会来一位顾客
3.如果有空闲的窗口,在顾客抵达之时就会马上处理
4.从顾客来到窗口到处理完顾客请求,这个平均需要120秒
以下就来模拟高峰期银行开多少个窗口最为合适:
模拟一个顾客类:package Queue;public class Customer {private int arriveTime;private int leaveTime;public Customer(int arriveTime){this.arriveTime = arriveTime;this.leaveTime = 0;}public int getArriveTime() {return arriveTime;}public void setArriveTime(int arriveTime) {this.arriveTime = arriveTime;}public int getLeaveTime() {return leaveTime;}public void setLeaveTime(int leaveTime) {this.leaveTime = leaveTime;}public int getTotalTime(){return leaveTime-arriveTime;}}
模拟类
代码:
package Queue;public class Demo1 {//假定有100个顾客//最大窗口数为10//从顾客来到窗口到处理完顾客请求,这个平均需要120秒public static void main(String[] args) {int NUM_CUSTOMER = 100;Customer customer;int NUM_WINDOWS = 10;int[] WindowsTime = new int[NUM_WINDOWS];int departs,Process = 120;Queue queue = new Queue();for(int i=0;i<NUM_WINDOWS;i++){//将窗口服务时间初始化为0for(int j=0;j<i;j++){WindowsTime[j] = 0;}//模拟顾客每隔15分钟过来for(int j=0;j<NUM_CUSTOMER;j++){queue.put(new Customer(j*15));}int totalTime = 0;while(!queue.isEmpty()){for(int j=0;j<=i;j++){//i表示窗口编号if(!queue.isEmpty()){customer = (Customer) queue.get();if(customer.getArriveTime()>WindowsTime[j]){//有空闲,直接处理departs = customer.getArriveTime()+Process;}else{//没空闲,需等待departs = WindowsTime[j]+Process;}WindowsTime[j] = departs;customer.setLeaveTime(departs);totalTime = totalTime+customer.getTotalTime();}}//for}//whileSystem.out.println("售票窗口数量:"+i);System.out.println("平均时间为:"+totalTime/NUM_CUSTOMER);}//for}}
0 0
- java实现队列及队列的应用
- JAVA实现队列 队列的链式存储结构及操作
- 基于数组实现Java 自定义Queue队列及应用
- java实现栈及队列
- java 实现的队列
- java 队列的实现
- 队列的实现(JAVA)
- 队列的实现-java
- 队列的java实现
- 一般队列和循环队列及优先级队列的实现
- 验证性实验三 栈、队列的实现及应用
- 双端队列(Deque)的python实现及应用
- 优先级队列的简单实现及STL举例应用
- 队列的实现与应用
- PHP消息队列实现及应用:消息队列概念介绍
- 【学习点滴-数据结构-栈&队列】 链式队列的实现及应用
- Java多线程-- SynchronousQueue队列和 TransferQueue队列比较及应用
- 队列的存储及实现
- AFNetworking速成教程
- Java程序员的JavaScript学习笔记(8——jQuery选择器)
- 软件行业做了3年,何去何从?究竟该搞哪个方面?迷茫+努力
- 求方程
- 敏捷相关Note
- java实现队列及队列的应用
- myeclipse10.7.1+maven3.23配置
- Java_并发线程_CompletionService
- web.py 0.3 新手指南
- 【博弈论+记忆化dp+visit数组+回溯】acm 2014 西安赛区 H problem make you happy
- RTS/CTS协议
- 第5条:避免创建不必要的对象
- [LeetCode] Two Sum
- mysqldump 备份导出数据排除某张表