java8 集合之Stack详解及实例

java  集合之Stack

概要:

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

Stack和Collection关系如下:

基于Java8的源代码:

public class Stack<E> extends Vector<E> {

  public Stack() {//创建空栈
  }

  public E push(E item) {//入栈
    addElement(item);
    return item;
  }
  //出栈
  public synchronized E pop() {
    E    obj;
    int   len = size();
    obj = peek();
    removeElementAt(len - 1);
    return obj;
  }
  //返回栈顶元素,但并不出栈
  public synchronized E peek() {
    int   len = size();

    if (len == 0)
      throw new EmptyStackException();
    return elementAt(len - 1);
  }
  //判断栈是否为空
  public boolean empty() {
    return size() == 0;
  }
  //查找元素并返回栈深
  public synchronized int search(Object o) {
    int i = lastIndexOf(o);

    if (i >= 0) {
      return size() - i;
    }
    return -1;
  }

  //序列版本号
  private static final long serialVersionUID = 1224463164541339165L;
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 浅谈Java中的Filter过滤器

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理.使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交

  • java synchronized加载加锁-线程可重入详解及实例代码

    java synchronized加载加锁-线程可重入 实例代码: public class ReGetLock implements Runnable { @Override public void run() { get(); } public synchronized void get() { System.out.println(Thread.currentThread().getId()); set(); } public synchronized void set() { Syste

  • Java中的final关键字深入理解

     java final关键字详解: 前言: Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,

  • Docker中Dockerfile之容器中运行MyEclipse搭建的JavaWeb项目

    这篇文章将讲述如何将上一篇文章中的Javaweb项目制作成Docker的镜像.小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 应用程序在Docker容器中运行和在物理机运行的原理是一样的,所以我们部署这个Javaweb项目到Docker中的步骤应该如下: 服务器支持(这里选择Centos7) 安装Java环境 安装Tomcat环境 将Tomcat根目录下的webapps/ROOT目录下的所有文件(夹)删除 将自己开发的web项目的WebRoot目录下的所有文件(夹)复

  • java ThreadPoolExecutor使用方法简单介绍

    java  ThreadPoolExecutor 前言: 在项目中如果使用发短信这个功能,一般会把发短信这个动作变成异步的,因为大部分情况下,短信到底是发送成功或者失败,都不能影响主流程.当然像发送MQ消息等操作也是可以封装成异步操作的. 使用基本的New Thread 如果想一个操作变成异步的,可以直接new thread,然后在run方法中实现业务操作即可.例如: new Thread(new Runnable() { public void run() { //发短信.发MQ消息等 } }

  • Java模拟新浪微博登陆抓取数据

    前言: 兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先: 要想登陆新浪微博需要预登陆,即是将账号base64加密,密码rsa加密以及请求http://login.sina.com.cn/sso/prelogin.php链接获取一些登陆需要参数,返回的接送字符串如: {"retcode":0,"servertime":1487292003,"

  • java中关于转义字符的一个bug

    在java中,你可以定义 char c = '\u4f60'; char m = '\u0045'; char e = '\u554a'; 这样的字面量,例如: System.out.println("\u535a\u5ba2\u56ed"); 这样的代码不管在什么编码环境下都不会出现中文乱码的问题 但是你不能定义这样的字面量: char c = '\u000a'; char m = '\u0027'; 这是因为\u000a和\u0027是特殊转义字符,Java对在字符串字面常量中的U

  • Java按值传递和按址传递(面试常见)

    先复制一个面试/笔试的题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案: 是值传递.Java语言的方法调用只支持参数的值传递.当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用.对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的.C++和C#中可以通过传引用或传输出参数来改变传入的参数的值.在C#中可以编写如下所示的代码,但是在Java中却做不到. java中的按值传

  • 深入理解java动态代理机制

    retrofit是一个解耦性非常高的网络请求框架,最近在研究的时候发现了动态代理这个非常强大且实用的技术,这篇文章将作为retrofit的前置知识,让大家认识:动态代理有哪些应用场景,什么是动态代理,怎样使用,它的局限性在什么地方? 动态代理的应用场景 1. AOP-面向切面编程,程序解耦 简言之当你想要对一些类的内部的一些方法,在执行前和执行后做一些共同的的操作,而在方法中执行个性化操作的时候--用动态代理.在业务量庞大的时候能够降低代码量,增强可维护性. 2. 想要自定义第三放类库中的某些方

  • java8 集合之Stack详解及实例

    java  集合之Stack 概要: Stack是栈,特性是先进后出(FILO,First In Last Out).Stack是继承于Vector(矢量队列),由于Vector是同数组实现的,Stack也是通过数组而非链表. Stack和Collection关系如下: 基于Java8的源代码: public class Stack<E> extends Vector<E> { public Stack() {//创建空栈 } public E push(E item) {//入栈

  • Java集合框架LinkedList详解及实例

    Java集合框架LinkedList详解 LinkedList定义 package java.util; public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ transient int size = 0; transient Node<E> first;

  • java 实现 stack详解及实例代码

    栈是限制插入和删除只能在一个位置上进行的 List,该位置是 List 的末端,叫做栈的顶(top),对于栈的基本操作有 push 和 pop,前者是插入,后者是删除. 栈也是 FIFO 表. 栈的实现有两种,一种是使用数组,一种是使用链表. public class MyArrayStack<E> { private ArrayList<E> list = new ArrayList<>(); public void push(E e) { list.add(e);

  • javascript ES6中set集合、map集合使用方法详解与源码实例

    set与map理解 ES6中新增,set集合和map集合就是一种数据的存储结构(在ES6之前数据存储结构只有array,object),不同的场景使用不同的集合去存储数据 set集合 Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用. set集合语法: //创建一个set集合,传参为一个可迭代的对象 const s1 = new Set(iterable); API 名称 类型 简介 Set.add() 原型方法 添加数据 Set.has() 原型方法 判断是否存在一个数据 S

  • Mybatis查询延迟加载详解及实例

    Mybatis查询延迟加载详解及实例 1.1     启用延迟加载 Mybatis的延迟加载是针对嵌套查询而言的,是指在进行查询的时候先只查询最外层的SQL,对于内层SQL将在需要使用的时候才查询出来.Mybatis的延迟加载默认是关闭的,即默认是一次就将所有的嵌套SQL一并查了将对象所有的信息都查询出来.开启延迟加载有两种方式. 第一种是在对应的<collection>或<association>标签上指定fetchType属性值为"lazy".如下示例中我们

  • Python操作MongoDB详解及实例

    Python操作MongoDB详解及实例 由于需要在页面展示MongoDB库里的数据,所以考虑使用python操作MongoDB,PyMongo模块是Python对MongoDB操作的接口包,所以首页安装pymongo. 1.安装命令 pip install pymongo 2.查询命令: import pymongo # 创建连接 client = pymongo.MongoClient(host="10.0.2.38", port=27017) # 连接probeb库 db = c

  • mysql分区功能详解,以及实例分析

    一,什么是数据库分区 前段时间写过一篇关于mysql分表的 的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面 (可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表 索引的.如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这 一张

  • Java 8 lambda表达式引入详解及实例

    Java 8 lambda表达式引入详解及实例 eclipse 下载安装 Help -> EclipseMarketplace -> 搜索Java 8 Kepler ->Java 8 support for eclipse Kepler SR2 安装完成后需要重启 Android Studio 在project的build.gradle文件中添加 buildscript { dependencies { classpath 'me.tatarka:gradle-retrolambda:3

  • jQuery数组处理详解(含实例演示)

    1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍 jQuery 对象的 $().each() 方法,此方法可用于例遍任何对象(不仅仅是数组哦~). 回调函数拥有两个参数:第一个为对象的成员或数组的索引, 第二个为对应变量或内容. 如果需要退出 each 循环可使回调函数返回 false, 其它返回值将被忽略. each遍历,相信都不陌生,在平常的事件处理中,是for循环的变体,但比for循环强大.在数组中,它可以轻松的攻取数组索引及对应的值.例: 复制代

  • java 泛型的详解及实例

    java 泛型的详解及实例 Java在1.5版本中增加了泛型,在没有泛型之前,从集合中读取每一个对象都需要进行强转,如果一不小心插入了类型错误的对象,在运行时就会报错,给日常开发带来了很多不必要的麻烦,比如以下代码: public class TestGeneric { public static void main(String[] args) { List list = new ArrayList(); list.add(" name:"); list.add(" zer

随机推荐