Java源码阅读之Stack
继承/接口实现关系
主要函数解析
push
源码阅读
/**
* Pushes an item onto the top of this stack. This has exactly
* the same effect as:
* <blockquote><pre>
* addElement(item)</pre></blockquote>
*
* @param item the item to be pushed onto this stack.
* @return the <code>item</code> argument.
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item);
return item;
}
个人理解
- 具体实现方法是Vector.addElement ,是线程安全的。
- 有返回值,返回值为压入的对象。
pop
源码阅读
/**
* Removes the object at the top of this stack and returns that
* object as the value of this function.
*
* @return The object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
个人理解
- 具体实现方法是Vector.removeElementAt,是线程安全的。
- 有返回值,返回值为栈顶的对象。
peek
/**
* Looks at the object at the top of this stack without removing it
* from the stack.
*
* @return the object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
个人理解
获取栈顶元素
empty
返回true为空,false表示栈不为空。
search
/**
* Returns the 1-based position where an object is on this stack.
* If the object <tt>o</tt> occurs as an item in this stack, this
* method returns the distance from the top of the stack of the
* occurrence nearest the top of the stack; the topmost item on the
* stack is considered to be at distance <tt>1</tt>. The <tt>equals</tt>
* method is used to compare <tt>o</tt> to the
* items in this stack.
*
* @param o the desired object.
* @return the 1-based position from the top of the stack where
* the object is located; the return value <code>-1</code>
* indicates that the object is not on the stack.
*/
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
个人理解
-
返回 -1 表示查询的元素不存在,返回的int表示该元素距离栈顶的位置。
push(1,2,3,4,5)
search(5) ------> 1
search(4) ------> 2
以此类推…
思考与总结
- Stack应该是线程安全的,因为Vector是线程安全的。
search(5) ------> 1
search(4) ------> 2
以此类推…
思考与总结
- Stack应该是线程安全的,因为Vector是线程安全的。
- Stack可以用Vector代替,但是需要对Vector的方法进行一定的加工,比如search等。