31.Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈。栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的。每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下:

Stack通过五个操作对Vector进行扩展,允许将向量视为堆栈。这五个操作如下:
| 操作 | 说明 |
|
|
测试堆栈是否为空。 |
|
|
查看堆栈顶部的对象,但不从堆栈中移除它。 |
|
|
移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
|
|
把项压入堆栈顶部。 |
|
|
返回对象在堆栈中的位置,以 1 为基数。 |
Stack继承Vector,他对Vector进行了简单的扩展:

Stack的实现非常简单,仅有一个构造方法,五个实现方法(从Vector继承而来的方法不算与其中),同时其实现的源码非常简单
/**
* 构造函数
*/
public Stack() { }
/**
* push函数:将元素存入栈顶
*/
public E push(E item) {// 将元素存入栈顶。
// addElement()的实现在Vector.java中
addElement(item);
return item;
}
/**
* pop函数:返回栈顶元素,并将其从栈中删除
*/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
// 删除栈顶元素,removeElementAt()的实现在Vector.java中
removeElementAt(len - 1);
return obj;
}
/**
* peek函数:返回栈顶元素,不执行删除操作
*/
public synchronized E peek() {
int len = size();
if (len == 0) {
throw new EmptyStackException();
}
// 返回栈顶元素,elementAt()具体实现在Vector.java中
return elementAt(len - 1);
}
/**
* 栈是否为空
*/
public boolean empty() {
return size() == 0;
}
/**
* 查找“元素o”在栈中的位置:由栈底向栈顶方向数
*/
public synchronized int search(Object o) {
// 获取元素索引,elementAt()具体实现在Vector.java中
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
Stack的源码很多都是基于Vector,所以这里不再累述,更多详情请参考:Vector相关内容
以上内容均来自http://www.cnblogs.com/chenssy/博客,此博客为本人学习笔记
31.Stack的更多相关文章
- 【转】Xamarin Forms 介绍
特此声明,本篇博文转自:http://blog.csdn.net/kinfey/article/details/29621381 什么是 Xamarin Forms ? Xamarin Forms 是 ...
- C++异常处理小例
学习程序的好方法是阅读代码和改进代码.下面的程例来自<An Overview of the C++ Programming Language>(5.1 异常和错误处理)程序用途:使用C ...
- NDK常见错误
1.错误1: android mk文件没有定义 $ ndk-buildAndroid NDK: Your APP_BUILD_SCRIPT points to an unknown file: /cy ...
- PHP 注册错误和异常处理机制
注册错误和异常处理机制有三个PHP函数需要学习 1. register_shutdown_function('Bootstrap\Library\Frame::fatalError'); 2. set ...
- Cyber Apocalypse 2021 pwn write up
Controller 考点是整数溢出和scanf函数的引发的栈溢出漏洞,泄露libc地址将返回地址覆盖成one_gadgets拿到shell. 1 from pwn import * 2 3 p = ...
- 城市代码表mysql
只有代码: # ************************************************************ # Sequel Pro SQL dump # Version ...
- 如何在CentOS 7 / Fedora 31/30/29上安装ELK Stack
原文地址:https://computingforgeeks.com/how-to-install-elk-stack-on-centos-fedora/ 原作者: Josphat Mutai 译者: ...
- 第31题:LeetCode946. Validate Stack Sequences验证栈的序列
题目 给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true:否则,返回 false . 示例 1: 输入: ...
- C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类.我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和 ...
随机推荐
- 每月IT摘录201904
技术 1.项目,相比数量,规模更重要. 毫无疑问,在实际工作中,积极参与实际工程项目是快速积累经验最好的办法. 相对于项目的数量,项目的规模更加重要.项目的规模是可以比较容易判断的.实际服务用户的数量 ...
- 浅析MVC模式与三层架构的区别
浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...
- Beyond Compare 4 提示错误“这个授权密钥已被吊销”的解决办法
错误提示: 这个授权密钥已被吊销. 解决方法: 删除以下目录中的所有文件即可. C:\Users\Administrator\AppData\Roaming\Scooter Software\Beyo ...
- Dockerfile的alpine时区设置
FROM *** RUN apk add -U tzdataRUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 52-python 画图二维
Python--matplotlib绘图可视化知识点整理 1.折线图: import numpy as np import matplotlib.pyplot as plt from pylab im ...
- python添加post请求
1.进入python的安装目录下的Scripts目录 ,利用pip install requests安装第三方模块 2.火狐浏览器自带firebug,打开http://10.148.111.111/q ...
- MSSQL死锁进程查看及关闭
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran ...
- python ftp 传输文件
# -*- coding: utf-8 -*- # 本地bytes 数据上报服务器同时创建文件from ftplib import FTP import time, _io from constant ...
- Mac使用Charles进行HTTPS抓包
技术来源: PengYunjing 第一步 配置HTTP代理,这步与抓取HTTP请求是一样的: 选择在8888端口上监听,然后确定.够选了SOCKS proxy,还能截获到浏览器的http访问请求. ...
- HTML-CSS背景渐进色
一.分类 a>线性渐变:颜色沿着一条直线过度:从 左到右.从上到下等: b>径向渐变:圆形或椭圆形渐变,颜色不再沿着一条直线变化,而是从一个起点朝所有方向混合. 1.线性渐变语法: bac ...