Java中的Stack类和Queue接口

前言

今天做剑指offer,里面有道题要求用两个栈实现一个队列,之前也零零散散遇到过一些需要用到栈和队列的数据结构的题目,于是抽空总结一下,不对之处望指出。


Stack类

Stack类继承自Vector类,有以下几个方法。
这里写图片描述
1. boolean empty()
判断栈是否为空
2. E peek()
返回栈顶对象,不移除
3. E pop()
返回栈顶对象,并移除
4. E push(E item)
压入栈顶
5. int search(Object o)
返回对象在栈的位置

search方法测试

因为平时没怎么用过search方法,于是编写一段小程序测试一下它的功能,如下。

import java.util.Stack;

public class StackDemo {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        System.out.println("1在栈中的位置: " + stack.search(1));
        System.out.println("2在栈中的位置: " + stack.search(2));
        System.out.println("3在栈中的位置: " + stack.search(3));
        System.out.println("4在栈中的位置: " + stack.search(4));
        stack.pop();
        stack.pop();
        System.out.println("4在栈中的位置: " + stack.search(4));
        System.out.println("3在栈中的位置: " + stack.search(3));
    }
}

输出结果如图
这里写图片描述
由输出知,search返回的位置是从栈顶开始计数,栈顶为1,而不在栈中的元素返回-1,所以我们可以通过返回值来判断栈中是否存在我们要搜索的元素。
最后,官方给出的API中推荐使用Deque接口来实现栈


Queue接口

Queue接口定义了如下6个方法,我们常用的LinkedList类就实现了Queue接口。
这里写图片描述
1. boolean add(E e)
向队列中添加元素
2. E element()
返回队列的头,且不移除
3. boolean offer(E e)
向队列中添加元素
4. E peek()
返回队列的头,且不移除
5. E poll()
返回队列的头,且移除
6. E remove()
返回队列的头,且移除
add、element、remove会在操作失败时抛出异常,而offer、peek、poll在操作失败时返回特殊值。
测试代码如下

import java.util.LinkedList;
import java.util.Queue;

public class QueueDemo {

    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        System.out.println("目前是空队列,返回的队列头是:" + queue.poll());
        // queue.remove();
        System.out.println("--------------");
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        System.out.println("使用peek方法,返回的结果是:" + queue.peek());
        System.out.println("使用poll方法,返回的结果是:" + queue.poll());
        System.out.println("使用poll方法后,再使用peek方法看队列头,返回的结果是:" + queue.peek());
    }

}

结果如图
这里写图片描述


参考

http://www.runoob.com/java/java-stack-class.html

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值