39.4 LinkedList(链表)集合的底层原理 - 图1
这是LinkedList的独有方法,但是他的父接口List和祖宗集合类Collection的API都可以用,相当于继承了
image.png

压栈push和出栈pop也可以这样写:

image.png
内部的源码就是addFirst和removeFirst
image.png
image.png

  1. package com.itheima.d5_collection_list;
  2. import java.util.LinkedList;
  3. public class ListDemo03 {
  4. public static void main(String[] args) {
  5. // LinkedList 可以完成队列结构 和栈结构(双链表)
  6. // 栈
  7. LinkedList<String> stack = new LinkedList<>(); // 这里不要用多态了,因为要使用LinkedList的独有功能
  8. // 压栈,入栈
  9. stack.addFirst("第1课子弹"); // 这个addFirst方法就等于先进到第一个位置,后面的元素把它挤下去,所以先进后出
  10. stack.addFirst("第2课子弹");
  11. stack.addFirst("第3课子弹");
  12. stack.addFirst("第4课子弹"); // 因为是栈的结构是:先进后出,后进先出,所以先出来:最后一个元素
  13. System.out.println(stack); //[第4课子弹, 第3课子弹, 第2课子弹, 第1课子弹]
  14. // 出栈,弹栈
  15. // System.out.println(stack.getFirst()); // 输出第一个元素(输出第一个先出的元素,也就是最后一个进的元素)
  16. // System.out.println(stack); //[第4课子弹, 第3课子弹, 第2课子弹, 第1课子弹]
  17. System.out.println(stack.removeFirst());// 从列表中删除,并返回第一个元素
  18. System.out.println(stack); //[第3课子弹, 第2课子弹, 第1课子弹]
  19. System.out.println(stack.removeFirst()); // 删除了第一个元素 :第三颗子弹
  20. System.out.println(stack); //[第2课子弹, 第1课子弹]
  21. // 队列 : 先进先出,后进后出 queue [kjuː] 队列的意思
  22. LinkedList<String> queue = new LinkedList<>();
  23. // 入队
  24. queue.addLast("1号"); // 这个方法就等于先进到集合的最后一个位置,然后让后面的元素跟在它后面,所以先进先出
  25. queue.addLast("2号");
  26. queue.addLast("3号");
  27. queue.addLast("4号");
  28. System.out.println(queue); //[1号, 2号, 3号, 4号]
  29. // 出队
  30. System.out.println(queue.removeFirst());// 将第一个元素从列表中删除,并返回第一个元素
  31. System.out.println(queue.removeFirst());
  32. System.out.println(queue.removeFirst());
  33. System.out.println(queue.removeFirst());
  34. System.out.println(queue); //[]
  35. }
  36. }