首页 > 编程语言 >java 中 Stack 已不推荐使用,应该用什么代替?

java 中 Stack 已不推荐使用,应该用什么代替?

时间:2023-03-31 21:32:55浏览次数:52  
标签:Deque java api 代替 使用 方法 Stack

为什么不推荐用 Stack?

java 中 Stack 已被“废弃”,主要是因为其性能低。Stack 继承自 Vector, 而 Vector 在每个方法中都加了锁,因此 Stack 性能低下。

详细分析:算法动画图解 | 被 "废弃" 的 Java 栈,为什么还在用 - 知乎

用什么代替 Stack?

建议使用 Deque<Integer> stack = new ArrayDeque<Integer>(); 代替 Stack。源自 java 8 的api文档:

java 中 Stack 已不推荐使用,应该用什么代替?_知乎

Deque 的主要用法

Deque 是一个接口,初始化 Deque: Deque<Integer> stack = new ArrayDeque<Integer>();

Deque对于添加与删除元素有很多名字不一样的方法,但功能大致是相同的。可以根据不同的使用场景使用不同名字的方法。比如(源自 java 8 的api文档中 Deque 的结果):

java 中 Stack 已不推荐使用,应该用什么代替?_java_02

可以看到:

  • Deque 作为双端队列用时,可以使用 addFirst, removeFirst, addLast, removeLast 等方法;
  • Deque 作为队列使用时,可以使用 add, poll 等方法;
  • Deque 作为栈使用时,可以使用 push, pop 等方法。

其实这些方法功能基本都一样,只是不同的名字更适用的场景不同而已。



标签:Deque,java,api,代替,使用,方法,Stack
From: https://blog.51cto.com/u_14301180/6162461

相关文章

  • vscode配置Java环境
    参考链接:https://blog.csdn.net/weixin_61370021/article/details/126788606?app_version=5.15.1&code=app_1562916241&csdn_share_tail={"type"%3A"blog"%2C"rType"%3A"article"%2C"rId"%3A"126788606"%2......
  • Solon v2.2.7 发布,支持 Java 8 到 Java 20
    Solon是一个高效的Java应用开发框架:更快、更小、更简单。也是一个有自己接口标准规范的开放生态。150来个生态插件,覆盖各种不同的应用开发场景:相对于SpringBoot和SpringCloud的项目:启动快5~10倍。(更快)qps高2~3倍。(更高)运行时内存节省1/3~1/2。(更少)打......
  • JAVA基础
    赋值符号表typevaluetint10sString0x1618变量和字面量之间的赋值s=10,基本数据类型,赋值s="tag",引用数据类型,赋地址变量和变量之间的赋值s=t基本数据类型变量,赋t的具体值引用数据类型变量,赋t指向的引用的地址值包装类型包......
  • 有关斐波那契查找-Java实现
    其实对于斐波那契查找,是一种新的查找思想,对与其实用性我持怀疑态度;主要就是,黄金风分割得思想;而斐波那契数列正好符合这一特性;其中的思想不过多赘述;主要事可以培养算法的思想;1/***2*fib查找3*@paramnum目标排查找数组4*@paramnumSearch目标数......
  • java查询hbase
    Mark——java查询hbase,https://blog.csdn.net/weixin_46408961/article/details/124224169查询Hbase数据分为Get方式查询,Scan方式查询,Scan配合Filter过滤查询01.Get方式查询importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.Cell;importorg.ap......
  • 结合 操作系统、Java多线程 学习并发编程
    为什么我们需要考虑并发?不考虑的话会出现什么问题?并发的多个程序(进程/线程)会对计算机资源进行争夺,如果不加以控制会出现混乱、严重影响程序运行效率,甚至错误首先是对CPU时间片的争夺对于多线程编程而言,由于创建线程后,线程的执行顺序是由调度程序控制的,也就是说各个线程的执行顺......
  • java integer == integer返回 true 还是 false?
    理论:IntegerCache缓存JAVA的Integer有IntegerCache会缓存-128~127之间的对象。如:Integerx=100,会调用Integer的valueOf()方法,这个方法就是返回一个Integer对象,但是在返回前,作了一个判断,判断要赋给对象的值是否在[-128,127]区间中,且IntegerCache(是Integer类的内部类,里面有一......
  • 【Java】删除String数组中的所有空值
    1、封装一个方法/****去除String数组中的空值*/privateString[]deleteArrayNull(Stringstring[]){StringstrArr[]=string;//step1:定义一个list列表,并循环赋值ArrayList<String>strList=newArrayList<String>();......
  • JavaFx 行间距 margin
    自己边尝试边摸索,间距都调不了,气的呀。如有不足,请指正!spacing相当于margin-topmargin-bottomenvBox.setSpacing(20);insets能设置上下左右间距btn1.setOpaqueInsets(newInsets(0,10,0,0));vgap="10"上下间距hgap="10"左右间距 ......
  • 系统化学习前端之JavaScript(ES6)
    前言ES6同样是ECMAScript的拓展,发布于2015年,目前多数浏览器对于部分ES6更新内容不支持,通常需要借助bable编译器编译成ES5或者ECMAScript早期版本语法去执行。ES6的学习推荐阮一峰老师的ES6教程。ES6ES6是ECMAScript最近一次较大版本的更新,更新内容主要是一......