请编写一个环形队列类,要求支持多线程读写,读写长度可参数化,队列长度限制在 256 个单元,读写策越为先进先出。当队列发生溢出时,依照先进先出的策略覆盖最早进入队列的元素。
求大神解读啊
求大神解读啊
解决方案 »
- MINA2 解析http的时候出现 java.nio.charset.MalformedInputException: Input length = 1
- 高手帮忙看下这段代码
- 数据库连接异常,怎么看sql2000端口号
- 怎么在没装中文编码的linux系统中取中文名文件流????help~~~~~~~~~~~~~~
- 初学者关于Vector的问题,分不多,但请各位大侠帮帮忙
- 如何打包java程序?
- 大家的看書方法是什麼,我在看<core java>,看得很困難!
- 大家觉得对于java来说,哪个桌面数据库比较好?
- JPG的存储格式
- 小弟有个关于eclipse的使用问题求教 谢谢啦
- 环形队列问题
- 环形队列问题
http://topic.csdn.net/u/20120913/16/1559e480-1dc6-4061-bedd-1885956fd1b0.html?13215
class Entry{
Entry previous;
Entry next;
E element;
}
private Entry header;
private int capacity;
private int size=0;
public CycleQueue(){
this(DEFAULT_CAPACITY);
}
public CycleQueue(int capacity){
this.capacity=capacity;
header = new Entry();
header.next=header;
header.previous=header;
}
/**向队列里加入元素
* @param elem 所要添加的元素
* @return 当且仅当队列溢出时返回被替换的元素,其他情况返回<code>null</code>。
*/
public synchronized E offer(E elem){
if(size>=capacity){
E e = header.next.element;
header.element = elem;
header = header.next;
header.element=null;
return e;
}
Entry e = new Entry();
e.element = elem;
e.previous = header.previous;
e.next = header;
e.previous.next = e;
header.previous = e;
size++;
return null;
}
/**从队列里取得元素
* @return 当队列为空时,返回<code>null</code>
*/
public synchronized E poll(){
if(size<=0){
return null;
}
Entry e = header.next;
header.next = e.next;
e.next.previous = header;
size--;
return e.element;
}
/**
* 获得队列的容量
*/
public int getCapacity(){
return capacity;
}
/**
* 获得队列当前所含元素的个数
*/
public int size() {
return size;
} /**
* 测试用例
*/
public static void main(String[] args) {
CycleQueue<Integer> queue = new CycleQueue<Integer>(5);
System.out.println(queue.offer(Integer.valueOf(0)));
System.out.println(queue.offer(Integer.valueOf(1)));
System.out.println(queue.offer(Integer.valueOf(2)));
System.out.println(queue.poll());
System.out.println(queue.poll());
for(int i=1;i<=5;i++){
queue.offer(i);
}
System.out.println(queue.offer(10));
System.out.println(queue.poll());
System.out.println(queue.poll());
}}