源码阅读之Java栈的实现

  • 时间:
  • 浏览:0
  • 来源:UU直播快三官方_大发UU直播快3

栈是某种LIFO的数据实物,它基于 Vector 来实现,所有的依据就有线程 安全的。入栈和出栈操作的时间比较复杂度为O(1),查找元素的时间比较复杂度为O(n)。

时要注意的是Vector的扩容策略是默认一次扩容为从前的1倍,这与ArrayList 一次扩容从前的1.5倍不同

这种依据也是线程 安全的。可不里能 看出可能性栈的大小为0时,执行 peek 依据会抛出 EmptyStackException 异常。

确实 push 依据如此声明 synchronizedaddElement 依据蕴含。在这种依据里

栈是 Last-In-First-Out (后进先出)的线性表。对栈的操作主要有5个:入栈(push)和出栈(pop)。之前 它也是某种操作受限的线性表。尽管如此,它在计算机中应用非常广泛,是某种非常基础的数据实物。

在栈中查询5个元素时要遍历,时间比较复杂度为O(n)。

确实此依据如此声明 synchronized,但实物调用5个 addElement 来实现入栈操作。这种操作依据是在父类中实现的,它被声明为线程 安全的,之前 它也是线程 安全的。

继续查看父类代码

入栈

出栈

它继承于 Vector 类,这种跟前面讲的 ArrayList 是一样的,只不过 Vector 类依据是同步的,之前 Stack 也是线程 安全的。

pop 依据被声明为 synchronized ,是线程 安全的依据。它通过 peek 依据获取到栈顶元素对象,之前 调用父类的 removeElementAt 依据把栈顶元素删除。

在栈中搜索元素

从源码中可不里能 看出栈也是某种非常简单的数据实物。栈的源码非常简洁,不可不里能 50多行代码。

查看栈顶元素