Java 栈和队列

java中除了基本类型int bool等但会的是实例,其他的都是对象的引用
python里所有的变量其实都是对象的引用(连基本类型都是如此),而这个引用,说白了就是个指向实例的指针。

 

 

为什么不推荐使用Stack?

因为Vector是当初JAVA曾经写得不太行的类,所以Stack也不太行。

Vector不行是因为效率不太行,很多方法都用了synchronized修饰,虽然线程安全,但是像ArrayDeque,LinkedList这些线程不安全的,在需要安全的时候也可以用Collections.synchronizedCollection()转化成线程安全的,所以Vector就没什么用处了

再根据仿生学
Stack只能上进上出,有点像刺胞动物(腔肠动物),就是那种从哪里吃进去就哪里拉出来的那种生活在海洋里的比较低级的生物。
Deque上进上出,上进下出,甚至下进上出,非常上流,只有你想不到,没有我Deque做不到的

Deque中常用方法:

以这2个为基础整出来的Deque除了结构不一样,方法都一样的。

把Deque当栈用的时候:

  
入栈push(E e)
出栈poll() / pop() 后者在栈空的时候会抛出异常,前者返回null
查看栈顶peek() 为空时返回null

把Deque当队列用的时候:

  
入队offer(E e)
出队poll() 为空时返回null
查看队首peek() 为空时返回null

双端队列

  • offerFirst(E):boolean 在队头添加元素,并返回是否添加成功。
  • offerLast(E):boolean 在队尾添加元素,并返回是否添加成功。
  • pollFirst():E 删除队头元素,并返回删除的元素,如果队列为null,返回null
  • pollLast():E 删除队尾元素,并返回删除的元素,如果队列为null,返回null
  • peekFirst():E 获取队头元素,如果队列为null将返回null
  • peekLast():E 获取队尾元素,如果队列为null将返回null
  • removeFirstOccurrence(Object):boolean 删除第一次出现的指定元素,并返回是否删除成功。
  • removeFirstOccurrence(Object):boolean 删除最后一次出现的指定元素,并返回是否删除成功

 

 

 

Deque 是抽象类。 Deque is abstract; cannot be instantiated

Deque<Integer> st =new Deque<>();错误

Deque<Integer> st =new LinkedList<>();正确

参考:https://blog.csdn.net/qq_44013629/article/details/106461200

https://blog.csdn.net/weixin_44008257/article/details/108013581

PriorityQueue

PriorityQueue是从JDK1.5开始提供的新的数据结构接口,它是一种基于优先级堆的极大优先级队列。优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列(参阅 Comparable),也可以根据 Comparator 来指定,这取决于使用哪种构造方法。优先级队列不允许 null 元素。依靠自然排序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。

参考:https://my.oschina.net/leejun2005/blog/135085

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值