Java 栈(java.util.Stack源码)

4 篇文章 0 订阅
3 篇文章 0 订阅

综述:

通过上述源码可知,Stack 类继承了 Vector 类(该类实现了List接口)。它的构造方法仅仅包括无参构造,创建一个空栈。

栈结构即先进后出,可以将其看做一个有底的容器,放入元素从底部开始。后来的元素放入已有元素的上方,且完全遮住了已有的元素,只有取走后来的元素,才可以看到早入栈的元素,对早入栈的元素进行操作。

方法介绍:

1、入栈(将元素保存到栈顶)

源码57行,“将新的元素放到栈顶”。参数 item 为待放到栈顶的元素;返回的对象即放入栈顶的元素。

2、出栈(弹出栈顶元素)

可以才看到 pop 方法前有 synchronized 修饰,即此方法为线程同步的方法,一个时刻仅能有一个线程进行出栈操作。首先,获取栈顶元素(peek方法),并保存栈顶元素到对象obj。然后,将栈顶元素从栈中删除(removeElement(len-1))。最后,将栈顶元素放回给调用 pop() 方法的对象。

3、查看栈顶元素

91行说明“查看栈顶的元素,但是不将元素从栈中移出”。首先,判断栈是否为空,若为空则抛出异常。否则,返回栈顶元素。注意,pop 方法调用了该 peek 方法,并在此基础上增加了移出栈顶元素的操作。

4、判断栈是否为空

为空,返回true,否则为false。

5、查找元素在栈中的位置

从栈顶开始查找,返回第一个匹配的元素位置。栈顶元素位置为1(不是0)。若栈中无匹配元素,则返回-1。

6、Stack类中还定义了一个常量(暂时不清楚用途)

7、代码示例:

import java.util.Stack;
public class StackDemo {

	public static void main(String[] args) {
		Stack<String> stack1= new Stack<String>();
		// 入栈
		stack1.push("firstItem");  
		stack1.push("secondItem");
		stack1.push("thirdItem");
		stack1.push("firstItem");
		// 查看元素位置
		System.out.println("firstItem location: "+stack1.search("firstItem"));
		System.out.println("secondItem location: "+stack1.search("secondItem"));
		// 元素出栈
		String outItem = stack1.pop();
		System.out.println("the pop item is: "+outItem);
		System.out.println("firstItem location after pop: "+stack1.search("firstItem"));
		// 判断栈是否为空
		System.out.println("the static is empty: "+stack1.empty());
		// 查看栈顶元素
		System.out.println("top element: "+stack1.peek());
	}
}

输出结果:

firstItem location: 1
secondItem location: 3
the pop item is: firstItem
firstItem location after pop: 3
the static is empty: false
top element: thirdItem 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值