java 固定大小的队列_Java简单实现固定长度队列

/*

* 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 

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 

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 + '}';

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值