当前位置:   article > 正文

栈(Stack)的详解_stack.peek

stack.peek

       栈是一种特殊的线性表,其只允许在指定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出(LIFO)的原则

1、压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶

      出栈:栈的删除操作叫做出栈,出数据在栈顶

2、栈的使用

 以下代码为演示

  1. import java.util.Stack;
  2. //stack的演示示例
  3. public class Demo1 {
  4. public static void main(String[] args) {
  5. Stack<Integer> stack = new Stack<>();
  6. stack.push(1);
  7. stack.push(2);
  8. stack.push(3);
  9. stack.push(4);
  10. stack.push(5);
  11. stack.push(6);
  12. //查看栈顶元素
  13. int top = stack.peek();
  14. System.out.println(stack);
  15. System.out.println("查看栈顶元素");
  16. System.out.println(top);
  17. //弹出栈顶元素
  18. Integer pop = stack.pop();
  19. System.out.println("弹出栈顶元素");
  20. System.out.println(pop);
  21. //输出元素个数
  22. System.out.println(stack.size());
  23. while(stack.isEmpty() == false){
  24. stack.pop();
  25. }
  26. System.out.println(stack);
  27. System.out.println(stack.size());
  28. }
  29. }

 

注:栈为空的时候,去pop或peek都会抛出异常 

2、栈的模拟实现

      由图可知,Stack继承了Vector,Vector和ArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的 

  1. import java.util.Arrays;
  2. public class Mystack {
  3. private int[] elementData;
  4. private int size;
  5. private final int DEFAULT_CAPACITY = 5;
  6. public Mystack() {
  7. this.elementData = new int[DEFAULT_CAPACITY];
  8. }
  9. public Mystack(int capacity) {
  10. if (capacity < 0) {
  11. throw new RuntimeException("数组容量不能小于0");
  12. }
  13. this.elementData = new int[capacity];
  14. }
  15. public void push(int data) {
  16. ensureCapacity();
  17. elementData[size] = data;
  18. size++;
  19. }
  20. public void ensureCapacity() {
  21. if (size == elementData.length) {
  22. this.elementData = Arrays.copyOf(elementData, elementData.length * 2);
  23. }
  24. }
  25. public int pop() {
  26. int top = peek();
  27. size--;
  28. return top;
  29. }
  30. public int peek() {
  31. if (size == 0) {
  32. throw new RuntimeException("栈为空");
  33. }
  34. return elementData[size - 1];
  35. }
  36. public int size() {
  37. return size;
  38. }
  39. public boolean empty() {
  40. return size == 0;
  41. }
  42. }

注:IDEA中格式化的快捷键:ctrl + alt + L

3、栈、虚拟机栈、栈帧的区别

     栈:是一种数据结构

     虚拟机栈:是JVM运行时数据区的一部分,是一块内存空间,局部变量,方法的开辟都保存在这个区域

     栈帧:方法开辟出来的内存被称为栈帧,细化为某一个方法的内存 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号