说说 Java 堆栈

堆栈是“后进先出”(LIFO)集合。因为最后压入栈的元素,会被第一个 弹出栈。

就好像堆叠在一起的盘子,必须把上面的盘子取出,才能取出下面的盘子。强行取出底下的盘子就会造成结构不稳,引起坍塌。

1 基本用法

Java 使用了一个新的类 ArrayDeque 来实现堆栈结构:

输出:

2 Stack 类

为何不推荐使用 Java Stack 类?

因为 Stack 类继承了 Vector 类,也就继承了 Vector 中所有公有方法。而 Vector 作为动态数组,它提供了在数组中任何位置添加或者删除元素的方法。这种设计破坏了栈这种数据结构,因为栈只允许在一端进行操作。

我们可以自定义一个名为 Stack 的类,来替换原生 Stack 类:

3 Vector 类

为何不推荐使用 Java Vector 类?

从Vector 类的源代码中可以看出,大量 API 方法加入 synchronized 标注,在方法级别实现同步操作。虽然这样做可以保证线程安全,但牺牲了性能。因此相对于 ArrayList 来说,效率不高。

还有一个原因是 Vector 对象扩容时,默认是原容量的2倍;而 ArrayList 类扩容是原容量的 1.5 倍,所以 ArrayList 类更节省空间。

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/108296069
今日推荐