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. 实现非管理型UPS在linux主机上的停电自动关机

    买了个山特的SANTAK TG-BOX 850 UPS,自带USB通讯线缆.本以为官方软件提供Linux下的CLI命令以监控UPS状态. 官网提供的下载链接巨慢无比不说,CLI下只提供了安装脚本,没有 ...

  2. C++类的this指针详解

    这篇文章主要讲解隐式this指针的概念,以及如何使用,包含const 先直接给出一个C++Primer里的类,你可能还不能完全看懂,但是不着急,我们一点点解释 class Sales_data { s ...

  3. .NET Conf 2019 大会上发布.NET Core 3.0

    北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开. 多功能性是.Ne ...

  4. [VB.NET Tips]字符串分隔

    在实际应用中,很多场景下都需要分隔字符串,如解析CSV文件等. 一般我们使用split方法来按照指定的分隔符来进行分隔字符串获得一个数组. Split方法的签名是: Split(ParamArray ...

  5. [Spark] 02 - Practice Spark

    开发环境 教学视频:Spark的环境搭建,需安装配置环境:Java, Hadoop 环境配置:玩转大数据分析!Spark2.X+Python 精华实战课程(免费)[其实只是环境搭建] 进入pyspar ...

  6. Regex分组与Pattern正则表达式对象

    1.正则规则:        1.String  regex  =  "[1-9]"          表示单个字符的取值范围是 1~9,注意是单个字符的取值范围        2 ...

  7. Two progressions CodeForce 125D 思维题

    An arithmetic progression is such a non-empty sequence of numbers where the difference between any t ...

  8. 【ADO.NET--MVC】初学MVC(MVC入门)(1)

    最近一直在学MVC,本来今天想开始做项目了,但是一下手才发现还有好多好多都不懂,虽然想照搬别人的模板,但是还是觉得很虚,这也不懂哪也不懂.看来学习一门技术断不是那么简单,只要随便套套模板,看看别人代码 ...

  9. Scala 多继承问题

    多继承问题: object LoadIssueDemo extends App { import java.io.PrintWriter trait Logger { def log(msg: Str ...

  10. Drill 学习笔记之 与Mongo性能测试比较

    性能测试: 竟然用了30秒.... 如果使用mongo 客户端只有1-2秒 感觉Drill是把数据拉过来再进行sql优化,并没有使用Mongo的API,效率低下让人失望...