环形队列问题 请编写一个环形队列类,要求支持多线程读写,读写长度可参数化,队列长度限制在 256 个单元,读写策越为先进先出。当队列发生溢出时,依照先进先出的策略覆盖最早进入队列的元素。求大神解读啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那边回复你了http://topic.csdn.net/u/20120913/16/1559e480-1dc6-4061-bedd-1885956fd1b0.html?13215 双向链表组成环状队列。public class CycleQueue<E> { public static int DEFAULT_CAPACITY = 256; 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()); }} String s=new String("ddd"); 一个布局管理器的问题;在线等;答完就结分; 关于AI的小问题 "任再旺"朋友在吗?关于您的图片的一些疑问,请您指教. 怎样在java里面调用oracle里面的自定义数据类型 恢复给分 @@@一个小问题@@@ 右键弹出菜单的一个问题 看看这里有没有人能回答这个题目 第一次来这里提问,大家给点建议,来着有分。。。 环形队列问题 新学者该怎样学习java
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());
}}