博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java简单实现固定长度队列
阅读量:6701 次
发布时间:2019-06-25

本文共 2586 字,大约阅读时间需要 8 分钟。

  hot3.png

/* * 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 MStart * @email m_start@163.com */public class FIFOTest {    /**     * @param args the command line arguments     */    public static void main(String[] args) {        FIFO fifo = new FIFOImpl(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 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
 extends List
, Deque
, Cloneable, java.io.Serializable {    /**     * 向最后添加一个新的,如果长度超过允许的最大值,则弹出一个 *     */    T addLastSafe(T addLast);    /**     * 弹出head,如果Size = 0返回null。而不同于pop抛出异常     * @return      */    T pollSafe();    /**     * 获得最大保存     *     * @return     */    int getMaxSize();    /**     * 设置最大存储范围     *     * @return 返回的是,因为改变了队列大小,导致弹出的head     */    List
 setMaxSize(int maxSize);}class FIFOImpl
 extends LinkedList
 implements FIFO
 {    private int maxSize = Integer.MAX_VALUE;    private final Object synObj = new Object();    public FIFOImpl() {        super();    }    public FIFOImpl(int maxSize) {        super();        this.maxSize = maxSize;    }    @Override    public T addLastSafe(T addLast) {        synchronized (synObj) {            T head = null;            while (size() >= maxSize) {                head = poll();            }            addLast(addLast);            return head;        }    }    @Override    public T pollSafe() {        synchronized (synObj) {            return poll();        }    }    @Override    public List
 setMaxSize(int maxSize) {        List
 list = null;        if (maxSize < this.maxSize) {            list = new ArrayList
();            synchronized (synObj) {                while (size() > maxSize) {                    list.add(poll());                }            }        }        this.maxSize = maxSize;        return list;    }    @Override    public 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;    }    @Override    public String toString() {        return "A{" + "name=" + name + '}';    }}

转载于:https://my.oschina.net/MStart/blog/518216

你可能感兴趣的文章
linux out of memory分析
查看>>
ExtJS给iframe设置src
查看>>
字符串题目知识点
查看>>
qt qml中PropertyAnimation的几种用法
查看>>
使用深山红叶工具盘备份瘫痪服务器的数据
查看>>
exportfs命令、NFS客户端问题、 FTP介绍、使用vsftpd搭建ftp服务
查看>>
Docker之bridge静态网络配置
查看>>
根据Cron表达式获取近几次任务执行时间
查看>>
LVM基本配置(缩减、扩张、快照)实际操作
查看>>
我的友情链接
查看>>
wuzhicms发送邮件
查看>>
c语言:字符串匹配的KMP算法
查看>>
jsp之分页
查看>>
linux命令设置无线连接
查看>>
检查Linux服务器网卡驱动版本与更新
查看>>
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(3)-Spring整合
查看>>
log4j的基本配置参数
查看>>
SQL 和 NoSQL 的区别
查看>>
mt6735 [CTS Fail]BuildFingerprint
查看>>
android 手机连电脑usb调试 adb devices 显示 unauthorized ,eclipse DDMS offline
查看>>