import lombok.Data;
import java.util.ArrayList;
import java.util.List;
public class FixedQueue<E> {
private Node<E> head = null;
private Node<E> tail = null;
private int capacity;
private int size;
public FixedQueue(int capacity) {
this.capacity = capacity;
}
public int size() {
return this.size;
}
public boolean isEmpty() {
return this.size == 0;
}
public void push(E element) {
if (size == capacity) {
remove();
}
Node<E> newNode = new Node<>(element, head);
if (this.size() == 0) {
this.tail = newNode;
}
this.head = newNode;
this.size++;
}
public E remove() {
if (isEmpty()) {
throw new RuntimeException("Empty queue.");
}
Node<E> root = this.head;
E element = this.tail.getElement();
while (root != null) {
if (root.getNext() == this.tail) {
this.tail = root;
this.tail.next = null;
break;
}
root = root.getNext();
}
this.size--;
return element;
}
public List<E> getAllElements() {
Node<E> root;
root = this.head;
List<E> elementList = new ArrayList<>(this.size);
for (int i = 0; i < this.size; i++) {
elementList.add(root.getElement());
root = root.getNext();
}
return elementList;
}
@Data
public static class Node<E> {
E element;
Node<E> next;
Node(E element, Node<E> next) {
this.element = element;
this.next = next;
}
}
}
测试类
package com.example.queue;
public class FixedQueueTest {
public static void main(String[] args) {
FixedQueue<String> fixedQueue = new FixedQueue<>(3);
System.out.println("Size: " + fixedQueue.size());
fixedQueue.push("1");
fixedQueue.push("2");
fixedQueue.push("3");
fixedQueue.push("4");
fixedQueue.push("5");
System.out.println("Size: " + fixedQueue.size());
System.out.println("Elements: " + fixedQueue.getAllElements());
int size = fixedQueue.size();
for (int i = 0; i < size; i++) {
System.out.println(fixedQueue.remove());
}
System.out.println("Size: " + fixedQueue.size());
}
}