java堆栈队列_java linkedlist里面的队列和栈

今天来说说java的队列和栈,java没有专门的搞个类来写这个队列,有个stack的类是继承vector的,vector就是一个各个方法加了synchronized的arraylist,也就是线程安全的数组,而它的stack也是基于数组的,所以使用起来也相对难受,然后这个vector和stack都是jdk1.0时代的api,目前都有相应的代替的api,所以对其不进行学习。现在的java的队列和栈都是把它们封装在了linkedlist里面。众所周知,linkedlist是一个双向链表,操作起来非常方便,java也封装了很多的方法在这个双向链表里面。一定要自己去看看源码,不然很难理解里面的精髓。话不多说,直接上代码。

首先是队列,即FIFO模型。

public static void main(String[] args) {

Queue q1 = new LinkedList<>();

q1.offer("aa");

q1.offer("bb");

q1.offer("cc");

while (q1.peek() != null) {

System.out.println(q1.poll());

}

}

输出是

然后我们来看源码,队列接口里面的方法有6个

大家看看英文也大概看懂他们的区别了,前面三个在为空的时候会报异常的,

add()会在长度不够时抛出异常:IllegalStateException; offer()则不会,只返回false

element()会在没元素时抛出异常:NoSuchElementException; peek()返回null;

remove()会在没元素时抛出异常:NoSuchElementException; poll()返回null;

所以我前面都是用后面的三个方法,这样就不报错了。然后看输出也很正常,符合队列的数据结构。反正大家就是要多看源码,看注释说明也好。

然后来看栈,FILO模型。这里就不是stack接口了,现在的java把它封装在了deque接口里面。

public static void main(String[] args) {

Deque s1 = new LinkedList<>();

s1.push("aa");

s1.push("bb");

s1.push("cc");

while (s1.peek() != null) {

System.out.println(s1.poll());

}

}

输出是:

结果符合。然后看源码。

然后看着就忽然发现自己理解java是怎么实现这些结构的了吧。没错,其实java就是利用双向链表里面的方法,从前面和后面去操作这个双向链表,然后把方法再封装成和队列和栈的方法的功能类似,就这样。有兴趣的话自己去试试。

关键是要对linkedlist足够的熟悉。

欢迎交流讨论。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值