使用LinkedList
类来实现一个队列,并通过继承AbstractQueue
或者实现Queue
接口来实现自定义队列。
以下是一个简单的示例,其中队列的大小与另一个List的容量保持一致:
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class DynamicSizeQueue<T> extends AbstractQueue<T> {
private Queue<T> queue;
private List<?> list;
public DynamicSizeQueue(List<?> list) {
this.queue = new LinkedList<>();
this.list = list;
}
@Override
public boolean offer(T t) {
if (list.size() == queue.size()) {
return false; // 队列已满,无法添加新元素
}
return queue.offer(t);
}
@Override
public T poll() {
return queue.poll();
}
@Override
public T peek() {
return queue.peek();
}
@Override
public int size() {
return queue.size();
}
@Override
public java.util.Iterator<T> iterator() {
return queue.iterator();
}
}
在这个示例中,我们创建了一个名为DynamicSizeQueue
的类,它继承自AbstractQueue
并持有一个LinkedList
作为内部队列。在构造函数中,我们传入了另一个List作为参考,以便保持队列大小与该List的容量一致。
offer
方法用于添加元素
在队列已满时返回false
。poll
方法用于取出队首元素并删除,peek
方法用于获取队首元素但不删除,size
方法用于获取队列大小。我们还实现了iterator
方法以支持遍历队列。
在Java中,offer
、poll
和peek
是Queue
接口中定义的方法,它们用于操作队列中的元素。
-
offer
方法用于向队列中添加一个元素,如果队列已满则返回false
。其方法签名为boolean offer(E e)
,其中E
是队列中存储的元素类型。示例代码如下:
Queue<Integer> queue = new LinkedList<>();
boolean result = queue.offer(5);
-
poll
方法用于获取并移除队列的头部元素,如果队列为空则返回null
。其方法签名为E poll()
,其中E
是队列中存储的元素类型。示例代码如下:
Queue<Integer> queue = new LinkedList<>();
Integer result = queue.poll();
-
peek
方法用于获取队列的头部元素但不移除,如果队列为空则返回null
。其方法签名为E peek()
,其中E
是队列中存储的元素类型。示例代码如下:
Queue<Integer> queue = new LinkedList<>();
Integer result = queue.peek();
总结:
-
offer
用于添加元素到队列,如果队列已满则返回false
。 -
poll
用于获取并移除队列头部的元素,如果队列为空则返回null
。 -
peek
用于获取队列头部的元素但不移除,如果队列为空则返回null
。
在Java中,如果您想要实现在添加新元素时挤出最旧的元素,您可以使用Queue
接口的offer
和poll
方法来实现。通过在调用offer
方法之后检查队列的大小,如果队列大小超过了您希望的大小,可以调用poll
方法来移除最旧的元素。
调用poll
方法移除最旧的元素。
使用offer
方法添加新元素,poll
方法获取并移除头部元素,peek
方法获取头部元素但不移除,size
方法获取队列大小。
public boolean offer(T element) {
if (queue.size() >= maxSize) {
queue.poll(); // 移除最旧的元素
}
return queue.offer(element); // 添加新元素
}