Stack堆栈:

是后进先出(LIFO)的对象堆栈,继承Vector—AbstractList--AbstractCollection类,底层是通过数组实现,

boolean empty() 判断堆栈是否为空

E peek() 取堆栈顶部对象,不删除它

E pop() 返回堆栈顶部对象,并删除它

E push(E item) 把对象压入堆栈顶部

int search(Object o) 返回对象在堆栈中位置,以1为基数

源码:

package java.util;

public

class Stack<E> extends Vector<E> {

// 版本ID。这个用于版本升级控制,这里不须理会!

private static final long serialVersionUID = 1224463164541339165L;

// 构造函数

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;

}

}

示例:

package test;

import java.util.Stack;

import java.util.Iterator;

public class TestStack {

public static void main(String[] args) {

Stack<String> stack = new Stack<String>();

stack.push("栈1");

stack.push("栈2");

stack.push("栈3");

stack.push("栈4");

System.out.println(stack);

System.out.println("1-第三个元素:"+stack.search("栈2"));

System.out.println("2-取栈顶元素并删除:"+stack.pop());

System.out.println("3-去栈顶元素不删除:"+stack.peek());

stack.push("栈5");

stack.push("栈6");

System.out.println("4-去栈顶元素不删除:"+stack.peek());

stack.push("栈7");

for(int i=0;i<stack.size();i++){

System.out.println(stack.get(i));//从 栈1 开始输出,也并不是必须从栈顶出

}

//这两种for循环都是从 栈1 开始出,实际上是把stack作为list处理了

for(Iterator<String> it=stack.iterator();it.hasNext();){

System.out.println(it.next());

}

}

}

java集合之Stack栈基础的更多相关文章

  1. Java集合的Stack、Queue、Map的遍历

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...

  2. Java 集合系列Stack详细介绍(源码解析)和使用示例

    Stack简介 Stack是栈.它的特性是:先进后出(FILO, First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现 ...

  3. C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。

    1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...

  4. Java集合之Stack 源码分析

    1.简介 栈是数据结构中一种很重要的数据结构类型,因为栈的后进先出功能是实际的开发中有很多的应用场景.Java API中提供了栈(Stacck)的实现,简单使用如下所示 package com.tes ...

  5. java集合之Vector向量基础

    Vector向量: vector类似动态数组,向量和数组类似,但是数组容量一旦确定不可更改,而向量的容量可变.向量只可以保存任何类型对象且容量不限制,数组对元素类型无限制但是容量有限. 适用场合:向量 ...

  6. Java集合之Stack

    Stack是栈,特性是先进后出(FILO,First In Last Out).Stack是继承于Vector(矢量队列),由于Vector是同数组实现的,Stack也是通过数组而非链表. Stack ...

  7. java集合之ArrayList链表基础

    ArrayList可变数组 : arrayList继承AbstractList抽象类,实现list接口,底层基于数组实现.可存放null,除了非同步的之外,大致等同Vector.适用快速访问,复制.序 ...

  8. java集合之linkedList链表基础

    LinkedList链表: List接口的链接列表实现.允许存储所有元素(包含null).使用频繁增删元素. linkedList方法: void addFirst(E e) 指定元素插入列表的开头 ...

  9. 给jdk写注释系列之jdk1.6容器(13)-总结篇之Java集合与数据结构

         是的,这篇blogs是一个总结篇,最开始的时候我提到过,对于java容器或集合的学习也可以看做是对数据结构的学习与应用.在前面我们分析了很多的java容器,也接触了好多种常用的数据结构,今天 ...

随机推荐

  1. spring boot的多环境部署

    需求:不同的环境有不同的开关属性,比如开发系统,需要关闭短信,微信的通知功能.而演示环境,线上环境则需要打开这些配置. 那么,如何做到呢?--->在properties.application配 ...

  2. ACM团队周赛题解(2)

    拉了CF583和CF486的两套div2题目 还是先贴宏定义部分 #define MAXN 1000000+5#define MOD 1000000007#define PI (acos(-1.0)) ...

  3. JVM垃圾回收?看这一篇就够了!

    深入理解JVM垃圾回收机制 1.垃圾回收需要解决的问题及解决的办法总览 1.如何判定对象为垃圾对象 引用计数法 可达性分析法 2.如何回收 回收策略 标记-清除算法 复制算法 标记-整理算法 分带收集 ...

  4. 基于GitHub Issues的评论系统--gitment

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/201909/ ...

  5. 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

    1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...

  6. MOOC web前端开发笔记(一)

    网站和网页 网站 互联网上用于展示特定内容的相关网页的集合. 网页 网站中的一页,一个网站中的网页通过"超链接"的方式被组织在一起. 主页 进入网站看到的第一个网页,主页的文件名通 ...

  7. 11 (OC)* CoreImage

    coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它的结构: 主要分为三部分: 1)定义部分:CoreImage 何CoreImageDefines. ...

  8. 如何编写出高质量的 equals 和 hashcode 方法?

    什么是 equals 和 hashcode 方法? 这要从 Object 类开始说起,我们知道 Object 类是 Java 的超类,每个类都直接或者间接的继承了 Object 类,在 Object ...

  9. linux使用命令上传下载文件 -- lrzsz

    之前都是用Xftp工具在本地和linux系统之间上传下载文件,最近觉得麻烦,因为平时用Xshell连接,要传输文件的时候还要额外使用别的工具,下面是lrzsz的安装和简单的使用过程: 详细的使用可以s ...

  10. Excel自定义格式参数

    一.自定义格式 方式一:代码结构组成代码分为四个部分,中间用“:”号分隔,具体如下:正数格式:负数格式:零格式:文本格式 两个代码部分,则第一部分用于正数和零和文本,第二部分用于负数 一个代码部分,则 ...