队列(queue)是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(First In First Out)的线性表,简称FIFO。
允许插入的一端称为队尾,允许删除的一端称为队头
利用Java链表实现队列
class NodeForQueue<E>{
NodeForQueue<E> next = null;
E data;
public NodeForQueue(E data) {
this.data = data;
}
}
/**
* 链表方式实现队列
*
* @author VicterTian
* @version V1.0
* @Date 2019/1/21
*/
public class MyQueueForLinkList<E> {
private NodeForQueue<E> head = null;
private NodeForQueue<E> tail = null;
public Boolean isEmpty(){
return head == tail;
}
public void put(E data){
NodeForQueue<E> newNode = new NodeForQueue<>(data);
// 队列为空
if (head == null || tail == null){
head = tail = newNode;
}else{
tail.next = newNode;
tail = newNode;
}
}
public E pop(){
if (isEmpty()){
return null;
}
E data = head.data;
head =head.next;
return data;
}
public int size(){
NodeForQueue<E> temp = head;
int size = 0;
while (temp != null){
size++;
temp = temp.next;
}
return size;
}
public static void main(String[] args) {
MyQueueForLinkList<Integer> queue = new MyQueueForLinkList<>();
queue.put(1);
queue.put(2);
queue.put(3);
queue.put(4);
System.out.println("queue.size() = " + queue.size());
System.out.println("queue.pop() = " + queue.pop());
System.out.println("queue.pop() = " + queue.pop());
}
}
利用Java数组实现队列,并支持多线程操作
public class MyQueueForArray<E> {
private LinkedList<E> list = new LinkedList<>();
private int size = 0;
public synchronized void put(E e) {
list.addLast(e);
size++;
}
public synchronized E pop() {
size--;
return list.removeFirst();
}
public synchronized Boolean isEmpty(){
return size == 0;
}
public synchronized int size(){
return size;
}
}