新手学源码__Stack底层实现

水深无声 2022-05-25 05:08 222阅读 0赞

前言

继昨天学习的Vector,今天来看看栈Stack实现,之所以放在集合这个专栏里面是因为java stack实现的底层是vector

Stack

栈的方法很简单






























方法 作用
empty 判断一个栈是否为空
peek 返回栈顶元素
pop 出栈,并返回被弹出栈的对象
push 入栈,并返回入栈的对象
search 从栈顶开始向下寻找第一个匹配的对象

具体实现

构造方法

  1. public Stack() {
  2. }

由于使用的是vector,所以构造方法里面啥也没有并不要实现啥东西

empty

  1. public boolean empty() {
  2. return size() == 0;
  3. }

只要看vector数组的大小是否==0

peek

  1. public synchronized E peek() {
  2. int len = size();
  3. if (len == 0)
  4. throw new EmptyStackException();
  5. return elementAt(len - 1);
  6. }

这里我们需要好好看一下,数组的尾部是作为的栈顶元素,为什么呢?主要是pop,接着往下看pop

pop

  1. public synchronized E pop() {
  2. E obj;
  3. int len = size();
  4. obj = peek();
  5. removeElementAt(len - 1);
  6. return obj;
  7. }

调用了vector的removeElementAt方法,在我们之前的一片博文中,我们知道在remove指定的index的时候,会执行一次copy数组的操作,如果栈顶设置在尾部,这个数组复制的过程减少很大的开销,PS,如果你对数组的复制不知道,请参考上一篇集合vector的博文。

push

  1. public E push(E item) {
  2. addElement(item);
  3. return item;
  4. }

push的操作也很简单

总结

stack的操作是简单的,通过学习我知道了这两个细节

  • java的栈实现是vector
  • java的栈顶是vector的数组尾

发表评论

表情:
评论列表 (有 0 条评论,222人围观)

还没有评论,来说两句吧...

相关阅读

    相关 新手__ArrayList

    前景 今天看了些集合的知识,感觉都是比较熟悉的那些,但是总觉得只知道怎么用,具体的细节部分我还是想去了解一下,根据别人前几年的博客,沿着这个思路去熟悉熟悉~一天一个或者两

    相关 HashSet的底层实现

    我看了一下HashSet的底层实现,发现被骗了,因为我发现它的底层是依托HashMap来实现的。这就让我很气了啊,好吧,我不气了,还是来看看它怎么来实现的吧,首先我们知道,Ha