Java 17 中的堆栈 Stack
发布时间:2022-10-18 11:15:07 所属栏目:大数据 来源:
导读: Java 17 中的堆栈 Stack
对于该类 Stack 的表示意义是对象的后进先出(LIFO)堆栈。首次创建堆栈时,它不包含任何项目。它扩展了五个操作,用来操作 Vector 的集合。
需要注意的是 Deque 接口
对于该类 Stack 的表示意义是对象的后进先出(LIFO)堆栈。首次创建堆栈时,它不包含任何项目。它扩展了五个操作,用来操作 Vector 的集合。
需要注意的是 Deque 接口
|
Java 17 中的堆栈 Stack 对于该类 Stack 的表示意义是对象的后进先出(LIFO)堆栈。首次创建堆栈时,它不包含任何项目。它扩展了五个操作,用来操作 Vector 的集合。 需要注意的是 Deque 接口以及对应的实现提供了更完整、更一致的后进后厨堆栈操作,应该优先使用此方式。 public class Stack extends Vector 针对该图简单的说一下: 表示的是什么类型: 其中实线代表着是继承, 虚线代表着实现。 和就是 UML 的规则。 构造方法: 该类中的 API 定义: 使用方式简单演示 虽然 Stack 是 List 接口实现, 但是对于方法 peek()、empty()、pop()、push(E item)、search(Object o) 方法都是扩展的方法, 所以父类中并不存在,为了各个类中间来回转换。 直接定义 Stack 对象。 定义如下: Stack stack = new Stack<>(); 对字符串进行操作,先存入对应的数据, 可以称为该过程为入栈: System.out.println("存入数据!"); for (int i = 0; i < Integer.valueOf(args[0]); i++) { stack.push(String.valueOf(i)); } System.out.println(stack); 使用 peek() 方法查看当前堆栈顶部的数据。这里只是返回栈顶的数据并不会对数据进行删除。 System.out.print("查看栈顶的数据: "); System.out.println(stack.peek()); 根据 Stack 堆栈的后进先出的规则(LIFO)后来的先出。 上面的 .peek() 方法, 将显示最后一次添加进去的数据。 取出堆栈中的数据也很方便。 使用方法 pop 取出即可, 这里可以称为出栈, 或者叫做弹栈。 System.out.println(stack.pop()); 在这里循环取出, 并判断当前的堆栈是否已经没有数据了。 System.out.print("取出栈顶的数据: "); for (int i = 0; i < Integer.valueOf(args[0]); i++) { if(stack.empty()){ System.out.println("堆栈中没有数据了"); break; } System.out.println(stack.pop()); System.out.print("显示当前数据: "); System.out.println(stack); } 当然也可以检索数据, 使用方法 search。 int index = stack.search("3"); 需要注意该方法的返回值是从 1 开始的,并且是后进先出, 如果想使用 get(int index) 取得数据, 需要使用集合的总数减去返回的位置。 System.out.println("根据下标获得数据: " + stack.get(stack.size() - index)); 最终的全部演示代码如下: 运行测试, 查看其中的效果是否和你想象的一致。 简化的流程是这样,这个是堆栈的流程, 并不是 Stack 的实现,它的实现就是使用了规则进行取值而已, 既然是后进先出, 保证其顺序的情况下,取值从最后往前取就好了,下面看看源码的实现就明白了。 写入数据 0 写入数据 1 写入数据2 省略其他的过程, 以此写入到 5。 这个时候栈顶就是最后写入的 5 。 如果这个时候想检索 4 的值。会得到下标的位置为 2。大概的流程就是这样了。 再次重申,集合和数据结构相辅相成的关系。 查看其源码, 发现Stack 还是大量的使用了 Vector 的实现, 比方说 pop 方法。 可以看到 调用了 java.util.Vector 的 addElement(E obj) 方法, 该方法又有调用了下面的方法 Vector.add(E e)。 最终调用了实际的方法为 Vector.add(E e, Object[] elementData, int s): 保存数据, 使元素数加一。 通过源码发现, 最终的实现,只是硬性的让数据读出来了。 数据的存放并没有发生变化。 这也是为什么上面直接取其下标的时候大数据堆栈, 还是和存入数据一致。 Java 的 Stack 就先说到这吧。 理解其中的思想, 比什么都重要。 很高兴您能看到这里。 这个知识点理解其概念,之后使用方法就可以忘记。下一章说说 Queue 队列之后。 可以使用其中的实现替代该方法。 历史的车轮一定会发生变迁, 变迁当然会有好有坏。好的多数都被保留的, 而坏的,多数人应该记不得了吧。 (编辑:均轻资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


