Java中ArrayQueue类的使用

本文通过示例展示了如何使用ArrayDeque实现栈和队列的功能,并对比了其与传统Stack类在性能上的优势。

public class ArrayQueueTest {

public static void main(String[] args) {


//把ArrayDeque当作栈来使用

ArrayDeque stack = new ArrayDeque();

stack.push("java");

stack.push("html5");

stack.push("php");

System.out.println(stack);
//[php, html5, java]
打印显示输出的结果是逆序输出

System.out.println(stack.peek());
//输出栈顶第一个对象,但是不在栈中删除

System.out.println(stack);
//[php, html5, java]
栈中的对象并没有改变

System.out.println(stack.pop());
//弹出并删除栈顶的元素

System.out.println(stack);
//[html5, java]


//把ArrayDeque当作队列来使用

ArrayDeque queue = new ArrayDeque();

queue.offer("java");

queue.offer("php");

queue.offer("html5");

System.out.println(queue);
//[java, php, html5] 按照添加的顺序输出

System.out.println(queue.peek());
//输出对头元素 得到java,但是并不删除对头的元素

System.out.println(queue);
//[java, php, html5] 输出对头元素

System.out.println(queue.poll());
//弹出对头元素

System.out.println(queue);
//[php, html5]对头元素已经被删除


//在Java中原有的栈的类型为stack,但是由于stack是古老的集合,相对于ArrayDeque比较性能比较差,因此在使用栈这种数据结构的时候建议使用ArrayDeque


}

}
### 数组实现队列 使用数组实现队列时,通常会采用循环队列的方式,避免数组空间的浪费。以下是一个简单的数组实现循环队列的示例代码: ```java class ArrayQueue { private int[] arr; private int front; private int rear; private int capacity; public ArrayQueue(int capacity) { this.capacity = capacity; arr = new int[capacity]; front = 0; rear = 0; } // 判断队列是否已满 public boolean isFull() { return (rear + 1) % capacity == front; } // 判断队列是否为空 public boolean isEmpty() { return front == rear; } // 入队列 public boolean offer(int e) { if (isFull()) { return false; } arr[rear] = e; rear = (rear + 1) % capacity; return true; } // 出队列 public int poll() { if (isEmpty()) { throw new IllegalStateException("Queue is empty"); } int element = arr[front]; front = (front + 1) % capacity; return element; } // 获取队列头部元素 public int peek() { if (isEmpty()) { throw new IllegalStateException("Queue is empty"); } return arr[front]; } } ``` ### 链表实现队列 使用链表实现队列时,需要维护队列的头部和尾部节点。以下是一个简单的链表实现队列的示例代码: ```java class Node { int data; Node next; public Node(int data) { this.data = data; this.next = null; } } class LinkedQueue { private Node front; private Node rear; public LinkedQueue() { front = null; rear = null; } // 判断队列是否为空 public boolean isEmpty() { return front == null; } // 入队列 public void offer(int e) { Node newNode = new Node(e); if (isEmpty()) { front = newNode; rear = newNode; } else { rear.next = newNode; rear = newNode; } } // 出队列 public int poll() { if (isEmpty()) { throw new IllegalStateException("Queue is empty"); } int element = front.data; front = front.next; if (front == null) { rear = null; } return element; } // 获取队列头部元素 public int peek() { if (isEmpty()) { throw new IllegalStateException("Queue is empty"); } return front.data; } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值