源码阅读之Java栈的实现

  • 时间:
  • 浏览:2
  • 来源:uu快3app赚钱_uu快3大小计划注册

这人法律方式也是应用线程安全的。可不都后能 看出肯能栈的大小为0时,执行 peek 法律方式会抛出 EmptyStackException 异常。

继续查看父类代码

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

其实此法律方式只有声明 synchronized,但外部调用一个多多多 addElement 来实现入栈操作。这人操作法律方式是在父类中实现的,它被声明为应用线程安全的,因此它也是应用线程安全的。

出栈

其实 push 法律方式只有声明 synchronizedaddElement 法律方式含有。在这人法律方式里

在栈中搜索元素

入栈

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

它继承于 Vector 类,这人跟前面讲的 ArrayList 是一样的,只不过 Vector 类法律方式是同步的,因此 Stack 也是应用线程安全的。

从源码中可不都后能 看出栈也是一种非常简单的数据形态。栈的源码非常简洁,只有100多行代码。

查看栈顶元素

pop 法律方式被声明为 synchronized ,是应用线程安全的法律方式。它通过 peek 法律方式获取到栈顶元素对象,因此调用父类的 removeElementAt 法律方式把栈顶元素删除。

栈是一种LIFO的数据形态,它基于 Vector 来实现,所有的法律方式就有应用线程安全的。入栈和出栈操作的时间比较复杂度为O(1),查找元素的时间比较复杂度为O(n)。

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