Java集合(六) Stack


Stack

  Stack继承Vector,所以就有可能调用到本不属于栈的insert和remove,导致栈可以任意插入和删除,而不是只能在栈顶。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Stack<E> extends Vector<E> {
public Stack() {
}

public E push(E item) {//元素入栈
addElement(item);

return item;
}

public synchronized E pop() {//元素出栈
E obj;
int len = size();

obj = peek();
removeElementAt(len - 1);

return obj;
}

public synchronized E peek() {//返回栈顶元素
int len = size();

if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}

public boolean empty() {
return size() == 0;
}

public synchronized int search(Object o) {//查询栈内元素下标
int i = lastIndexOf(o);

if (i >= 0) {
return size() - i;
}
return -1;
}

/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = 1224463164541339165L;
}


模仿实现Stack

  根据记忆仿照Stack类的方法来实现栈结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class MyStack<E> extends Vector<E> {
public MyStack(){
}

public E push(E e){
addElement(e);
return e;
}

public synchronized E pop(){
E e;
int len = size();

e = peek();
removeElementAt(--len);
return e;
}

public synchronized E peek(){
int len = size();
if(len == 0)
throw new EmptyStackException();
return elementAt(len-1);
}

public synchronized int search(E e){
int i = lastIndexOf(e);
if(i >= 0)
return size()-i;
return -1;
}

}

参考博客和文章书籍等:

《Java核心技术 卷Ⅰ》

因博客主等未标明不可引用,若部分内容涉及侵权请及时告知,我会尽快修改和删除相关内容