java队列数据结构
时间: 2023-11-10 13:51:26 浏览: 42
Java中的队列是一种基本的数据结构,用于存储和管理元素。Queue接口是Java集合框架中定义的一个接口,它提供了一组方法来操作队列。不同的实现类可以选择不同的方式来实现队列的功能。
在Java中,我们可以使用LinkedList类实现Queue接口来创建一个队列对象。通过使用add()方法向队列中添加元素,使用peek()方法获取队列的头部元素,使用remove()方法移除队列的头部元素,使用size()方法获取队列的大小,使用isEmpty()方法判断队列是否为空。以下是一个使用Queue接口和LinkedList实现类的示例:
import java.util.Queue;
import java.util.LinkedList;
public class QueueExample {
public static void main(String[] args) {
// 创建一个Queue对象
Queue<String> queue = new LinkedList<>();
// 添加元素到队列
queue.add("Apple");
queue.add("Banana");
queue.add("Orange");
// 获取队列头部元素
String head = queue.peek();
System.out.println("头部元素:" + head);
// 遍历队列并输出元素
System.out.println("队列元素:");
for (String element : queue) {
System.out.println(element);
}
// 移除队列头部元素
String removedElement = queue.remove();
System.out.println("移除的元素:" + removedElement);
// 队列大小
int size = queue.size();
System.out.println("队列大小:" + size);
// 判断队列是否为空
boolean isEmpty = queue.isEmpty();
System.out.println("队列是否为空:" + isEmpty);
}
}
除了Queue接口,Java中还提供了另一个接口叫做Deque(Double Ended Queue,双端队列),它提供了在队列的两端进行操作的方法。同样地,我们可以选择不同的实现类来创建一个双端队列对象。以下是一个使用Deque接口和ArrayDeque实现类的示例:
import java.util.Deque;
import java.util.ArrayDeque;
public class DequeExample {
public static void main(String[] args) {
// 创建一个Deque对象
Deque<String> deque = new ArrayDeque<>();
// 添加元素到双端队列
deque.addFirst("Apple");
deque.addLast("Banana");
deque.addLast("Orange");
// 获取双端队列头部和尾部元素
String first = deque.getFirst();
String last = deque.getLast();
System.out.println("头部元素:" + first);
System.out.println("尾部元素:" + last);
// 遍历双端队列并输出元素
System.out.println("双端队列元素(从头到尾):");
for (String element : deque) {
System.out.println(element);
}
// 移除双端队列头部和尾部元素
String removedFirst = deque.removeFirst();
String removedLast = deque.removeLast();
System.out.println("移除的头部元素:" + removedFirst);
System.out.println("移除的尾部元素:" + removedLast);
// 双端队列大小
int size = deque.size();
System.out.println("双端队列大小:" + size);
// 判断双端队列是否为空
boolean isEmpty = deque.isEmpty();
System.out.println("双端队列是否为空:" + isEmpty);
}
}
除了Queue接口和Deque接口,Java还提供了优先队列(PriorityQueue)的实现类。优先队列根据元素的优先级进行排序,在插入元素时会按照一定的规则来确定元素的位置。以下是一个使用优先队列的示例:
import java.util.PriorityQueue;
import java.util.Comparator;
public class PriorityQueueExample {
public static void main(String[] args) {
// 创建一个优先队列对象,默认采用最小堆实现
PriorityQueue<Integer> queue = new PriorityQueue<>(10, new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
return a - b; // 如果a>b则交换,所以这是一个递增序列
}
});
// 向优先队列中添加元素
queue.offer(13);
queue.offer(9);
// 遍历优先队列并输出元素
int len = queue.size();
for (int i = 0; i < len; i++) {
System.out.println(queue.poll());
}
// 输出 9 13
// 默认采用最小堆实现的优先队列
PriorityQueue<Integer> queue2 = new PriorityQueue<>();
queue2.offer(11);
queue2.offer(9);
// 遍历优先队列并输出元素
len = queue2.size();
for (int i = 0; i < len; i++) {
System.out.println(queue2.poll());
}
// 输出 9, 11
}
}
此外,我们还可以使用Java数组来实现一个简单的队列,但这种方式需要手动实现队列的各种操作。