Vector
基于数组,线程安全,慢
类声明
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Vector的方法和ArrayList基本相同,但是在方法上都加了 synchronized
关键字,作为线程安全的集合已经不推荐使用,如果有相关的同步需求可以使用 Collections.synchronizedList
之类的方法来装饰集合(选择性的添加同步修饰)。
Stack
Stack
类代表后进先出(LIFO)堆栈的对象。它继承了Vector
类并扩展了五个操作
Deque
接口及其实现提供了更完整和一致的LIFO堆栈操作集,当没有并发要求时应优先使用Deque实现栈
类声明
public class Stack<E> extends Vector<E>
扩展的五个方法
private static final long serialVersionUID = 1224463164541339165L;
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;
}
// 返回该元素在第一次出现在堆栈中基于栈顶(栈顶为1)的位置,如果不存在则返回-1
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
search
方法
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(3);
stack.push(1);
stack.push(2);
stack.push(1);
System.out.println(stack); // [3, 1, 2, 1] 栈底 -> 栈顶
System.out.println(stack.search(1)); // 1
System.out.println(stack.search(2)); // 2
System.out.println(stack.search(3)); // 4
}