栈先进后出,常用方法是push/pop/peek。
初始化方法:
Deque<Integer> stack = new ArrayDeque<>();
Deque<Integer> stack = new LinkedList<>();
不用stack实现的原因是:
- stack是线程安全的,需要上锁,平时应用中并没有强烈的需求。
- JDK官方已建议优先使用Deque的实现类来代替Stack:Stack从Vector继承的一个副作用是,暴露了set/get方法,可以进行随机位置的访问,这与Stack只能从尾巴上进行增减的本意相悖。此外,Deque在转成ArrayList或者stream的时候保持了“后进先出”的语义,而Stack因为是从Vector继承,没有这个语义。
- ArrayDeque和LinkedList这两者底层,一个采用数组存储,一个采用链表存储;(这两者既可当成栈(仅支持在尾部加入或移除元素)使用;也可当成双端队列使用,即可以在队列的两端(头或尾)将元素加入或移除。)
LinkedList总结
linkedlist是一个双向链表,增删快,查询慢。
使用linkedlist可实现双向链表,队列,栈,双端队列,单向列表等。
用作双向链表
用作栈
参考原文链接:https://blog.youkuaiyun.com/linysuccess/article/details/109038453 https://blog.51cto.com/u_16213564/7174027