简单实现队列先进先出:

package com;import java.util.LinkedList;public class MyQueue
{private LinkedList list = new LinkedList();public void put(Object t){ //加入数据list.addFirst(t);}public Object get(){ //取出先加入的数据return  list.removeLast();}public boolean isEmpt(){return  list.isEmpty();}public int getSize(){return  list.size();}
}

运行:

 @Testpublic void queue () throws Exception{MyQueue myQueue = new MyQueue();for(int i = 0; i<10;i++){myQueue.put(Integer.toString(i));}while(!myQueue.isEmpt()){System.out.println("当前取出队列数据: "+myQueue.get());}System.out.println("当前队列数据长度: "+myQueue.getSize());System.out.println("当前队列数据是否为空: "+myQueue.isEmpt());}

结果:

=======================================================================================

稍微复杂点的demo:

/** To change this template, choose Tools | Templates* and open the template in the editor.*/
package linkedlisttest;import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;/**** @author Vicky.H* @email eclipser@163.com*/
public class FIFOTest {/*** @param args the command line arguments*/public static void main(String[] args) {FIFO<A> fifo = new FIFOImpl<A>(5);for (int i = 0; i < 20; i++) {A a = new A("A:" + i);A head = fifo.addLastSafe(a);System.out.println(i + "\thead:" + head + "\tsize:" + fifo.size());}System.out.println("---------------");System.out.println("弹出数据");List<A> polls = fifo.setMaxSize(3);for (A a : polls) {System.out.println("\thead:" + a);}System.out.println("剩余数据");for (A a : fifo) {System.out.println("\thead:" + a);}System.out.println(fifo.size());}
}interface FIFO<T> extends List<T>, Deque<T>, Cloneable, java.io.Serializable {/*** 向最后添加一个新的,如果长度超过允许的最大值,则弹出一个 **/T addLastSafe(T addLast);/*** 弹出head,如果Size = 0返回null。而不同于pop抛出异常* @return */T pollSafe();/*** 获得最大保存** @return*/int getMaxSize();/*** 设置最大存储范围** @return 返回的是,因为改变了队列大小,导致弹出的head*/List<T> setMaxSize(int maxSize);}class FIFOImpl<T> extends LinkedList<T> implements FIFO<T> {private int maxSize = Integer.MAX_VALUE;private final Object synObj = new Object();public FIFOImpl() {super();}public FIFOImpl(int maxSize) {super();this.maxSize = maxSize;}@Overridepublic T addLastSafe(T addLast) {synchronized (synObj) {T head = null;while (size() >= maxSize) {head = poll();}addLast(addLast);return head;}}@Overridepublic T pollSafe() {synchronized (synObj) {return poll();}}@Overridepublic List<T> setMaxSize(int maxSize) {List<T> list = null;if (maxSize < this.maxSize) {list = new ArrayList<T>();synchronized (synObj) {while (size() > maxSize) {list.add(poll());}}}this.maxSize = maxSize;return list;}@Overridepublic int getMaxSize() {return this.maxSize;}
}class A {private String name;public A() {}public A(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "A{" + "name=" + name + '}';}
}

用java来实现FIFO先进先出的队列相关推荐

  1. java 先入先出,java_阻塞队列(FIFO先进先出)

    java_阻塞队列(FIFO先进先出) ArrayBlockingQueue:由数组结构组成的有界阻塞队列: LinkedBlockingQueue:由链表结构组成的有界阻塞队列(但大小默认值为:In ...

  2. java先进先出 循环队列_java队列--先进先出(循环队列、链队列)

    队列:只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头). 队列的特征就是: 先进先出. 队列的思想及实现也同样非常简单.在生活中的各种常常都需要排队进行,键盘中缓存区.操作系统中的作业调 ...

  3. 在JAVA中用两个栈实现队列的功能

    此问题的实现可以加深对栈和队列的理解,让我们先来认识一下栈和队列 1.Stack栈 栈(Stack)是一种后进先出(LIFO)的数据结构 Stack只有入栈和出栈的操作,常用方法有: (1)把元素压栈 ...

  4. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  5. Java线程详解(15)-阻塞队列和阻塞栈

    Java线程:新特征-阻塞队列 阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度 ...

  6. java多线程之:SynchronousQueue队列

    转载自  java多线程之:SynchronousQueue队列 SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然.同步队列没有任何内部容量,甚至 ...

  7. 和朱晔一起复习Java并发(二):队列

    和朱晔一起复习Java并发(二):队列 老样子,我们还是从一些例子开始慢慢熟悉各种并发队列.以看小说看故事的心态来学习不会显得那么枯燥而且更容易记忆深刻. 阻塞队列的等待? 阻塞队列最适合做的事情就是 ...

  8. Java:基于LinkedList实现栈和队列

    1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit;import java.util.L ...

  9. 操作系统 FIFO 先进先出页面置换算法

    FIFO 先进先出页面置换算法 根据作业序列判断置换,先进先置换的原则. 实现过程: 用vector简单模拟这个过程,不用直接queue模拟,是因为,当判断是否需要置换的时候,queue不好判断在队列 ...

最新文章

  1. SQLSERVER存储过程基本语法使用
  2. 什么是脏读,不可重复读,幻读
  3. [数据结构-划分树小结]
  4. java的socket读取一行就结束运行了?使用这种方法可以读取多行数据!
  5. Windows下编程需要看哪些书
  6. JAVA并发篇_公平锁与非公平锁
  7. iPhone SE 2生产无限期推迟,苹果决定推迟3月份产品发布会
  8. 查看mysql单个表大小限制_查看单个mysql数据库中各个表的大小
  9. chkconfig命令及的使用 与linux的七个运行级别
  10. android文字立体,3d立体字转换器
  11. C C++实现网络验证和本地验证
  12. 传奇3单机服务器怎么修改器,自己是GM并架设了传奇3单机版,如何改变装备属性?...
  13. 大学生PHP简单网站制作方法 学生PHP网站作业 动态PHP毕业设计 PHP MYSQL在线留言板网站源码
  14. 【Javascript】shift、unshift、pop、push的区别
  15. ntpd服务状态及日志查询方式
  16. (Java)图解排序算法之归并排序
  17. 杰瑞学Perl之文件操作(1)
  18. 查看android模拟器ip地址
  19. Windows10退出微软账户使用本地账户
  20. 平安银行软件测试项目,中国平安银行关于软件测试笔试试题(一)

热门文章

  1. 简单的Site to site ipsec ×××实验
  2. Ubuntu下如何修改文件或者文件夹的权限
  3. STM32F10x_RTC秒中断
  4. Spring scope属性详解
  5. Section 1.3 milk
  6. Http Handler 介绍
  7. 一键安装nginx(auto_nginx_install.sh
  8. x86 服务器常见问题和故障诊断流程
  9. Linux系统安装配置curl
  10. ubuntu上 grafana + influxdb + telegraf 安装配置