- java中stack、queue和deque的操作
- Stack
- 基本操作
- 示例
- 遍历
- queue
- 基本操作
- 示例
- 遍历
- deque
- 基本操作
- 示例
- 遍历
- 参考链接
Stack示例stack = new Stack<>(); // 为空返回true,不为空返回false stack.isEmpty() // 添加元素 stack.push() // 移除栈顶 stack.pop() // 获取栈顶值,为空返回null,元素不出栈 stack.peek() // 为空返回0,不为空返回一个大于1的整数 stack.size() // 对元素进行排序,如果不指定则按照Z-A排序 stack.sort(null); // 查找一个对象是否在堆栈中存在(true/false) stack.contains("February"); // 栈底元素位0,输出指定位置的元素 stack.elementAt(0)); // 返回该元素的位置(栈顶为1),否则返回-1 stack.search("April");
public static void stackTest() {
String[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" };
Stack stack = new Stack<>();
for(int i = 0; i < months.length; i ++){
stack.push(months[i]);
}
stack.sort(null);
System.out.println(stack.search("April"));
System.out.println(stack.contains("April"));
System.out.println(stack.elementAt(0));//输出指定位置的元素
System.out.println(stack.size());
for(int i = 0; i < months.length; i ++){
System.out.println(stack.pop());
}
}
// 结果
12
true
April
12
September
October
November
May
March
June
July
January
February
December
August
April
遍历
-
1 增强for循环
for(Object o : stack) { System.out.println(o); } -
2 while循环条件判断
while(!stack.isEmpty()) { System.out.println(stack.pop()); } -
3 Iterator迭代器
Iterator it = stack.iterator(); while (it.hasNext()) { System.out.println(it.next()); }
Queue示例queue = new LinkedList<>(); // 将元素添加到队尾,如果成功,则返回true,否则返回false offer() // 将队首的元素删除,并返回该元素,如果队列为空,则返回null poll() // 返回队首的元素,但不进行删除操作,如果队列为空,则返回null peek() // 将指定的元素插入队列,成功返回true,否则异常 add() // 返回队列的开头。如果队列为空,则引发异常。 element() // 返回并删除队列的头部,队列为空,则引发异常 remove()
public static void queueTest() {
Queue queue = new LinkedList<>();
queue.offer("one");
queue.offer("two");
queue.offer("three");
queue.offer("four");
System.out.println(queue);
//从队首取出元素并删除
String poll = queue.poll();
System.out.println(poll);
System.out.println(queue);
//从队首取出元素但是不删除
String peek = queue.peek();
System.out.println(peek);
System.out.println(queue);
//遍历队列,这里要注意,每次取完元素后都会删除
//整个队列会变短,所以只需要判断队列的大小即可
while(queue.size() > 0) {
System.out.println(queue.poll());
}
}
// 结果
[one, two, three, four]
one
[two, three, four]
two
[two, three, four]
two
three
four
遍历
-
1 增强for循环
for (Object o : queue) { System.out.println(o); } -
2 while循环条件判断
while (!queue.isEmpty()) { System.out.println(queue.poll()); } -
3 Iterator迭代器
Iterator it = queue.iterator(); while (it.hasNext()) { System.out.println(it.next()); }
Dequedeque = new ArrayDeque<>(); // 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false offerFirst() // 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false offerLast() // 返回双端队列的第一个元素。如果双端队列为空,则返回null。 peekFirst() // 返回双端队列的最后一个元素。如果双端队列为空,则返回null peekLast() // 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null pollFirst() // 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null pollLast() // 在双端队列的开头添加指定的元素,如果双端队列已满,则引发异常 addFirst() // 在双端队列的末尾添加指定的元素,如果双端队列已满,则引发异常 addLast() // 返回双端队列的第一个元素。如果双端队列为空,则引发异常 getFirst() // 返回双端队列的最后一个元素。如果双端队列为空,则引发异常 getLast() // 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常 removeFirst() // 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常 removeLast()
以下是Deque接口提供的用于实现堆栈的方法:
push() - 在双端队列的开头添加元素 pop() - 从双端队列的开头删除元素 peek() - 从双端队列的开头返回一个元素示例
public static void addStrings(String num1, String num2) {
// 使用ArrayDeque类创建Deque
Deque numbers = new ArrayDeque<>();
//添加元素到Deque
numbers.offer(1);
numbers.offerLast(2);
numbers.offerFirst(3);
System.out.println("Deque: " + numbers);
//访问Deque的元素
int firstElement = numbers.peekFirst();
System.out.println("第一个元素: " + firstElement);
int lastElement = numbers.peekLast();
System.out.println("最后一个元素: " + lastElement);
//从Deque 移除元素
int removedNumber1 = numbers.pollFirst();
System.out.println("移除第一个元素: " + removedNumber1);
int removedNumber2 = numbers.pollLast();
System.out.println("移除最后一个元素: " + removedNumber2);
System.out.println("更新后的Deque: " + numbers);
}
// 结果
Deque: [3, 1, 2]
第一个元素: 3
最后一个元素: 2
移除第一个元素: 3
移除最后一个元素: 2
更新后的Deque: [1]
遍历
-
1 增强for循环
for(Object o : deque) { System.out.println(o); } -
2 while循环条件判断
while(deque.pollLast()!=null) { System.out.println(deque.pollLast()); } while(!deque.isEmpty()) { System.out.println(deque.pollFirst()); } -
3 Iterator迭代器
Iterator it = deque.iterator(); while (it.hasNext()) { System.out.println(it.next()); }
https://www.nhooo.com/java/java-queue.html
https://www.pudn.com/news/627ceb0c9b6e2b6d551bf776.html



