Java集合源碼解析系列博客
轉載請標明出處:
https://blog.csdn.net/u011035026/article/details/88060973
1、Stack簡介?
- Stack是一個後進先出(last in first out,LIFO)的堆棧。
- 在Vector類的基礎上擴展5個方法而來。
2、源碼解析
/**
* Stack源碼解析
*
* @param <E>
*/
public class Stack<E> extends Vector<E> {
/**
* * 序列化唯一表示UID
*/
private static final long serialVersionUID = 1224463164541339165L;
/**
* 無參構造函數
* 創建一個空的棧
*/
public Stack() {
}
/**
* 將一個元素添加到棧頂,線程安全
*
* @param item 元素
* @return
*/
public E push(E item) {
addElement(item);
return item;
}
/**
* 移除棧頂的元素,並且返回該元素,線程安全
*
* @return 返回將要移除棧頂的元素
*/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
/**
* 查看棧頂的元素,但是不把其移除棧頂,線程安全
*
* @return 返回查看的棧頂元素
*/
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
/**
* 判斷當前棧是否爲空
*
* @return true代表爲空,false代表不爲空
*/
public boolean empty() {
return size() == 0;
}
/**
* 獲取當前元素在棧中的索引座標,線程安全
*
* @param o 將查找的元素
* @return 返回-1則代表該棧中不包含當前元素,否則返回其對應的索引位置
*/
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
}