www.cdbdqn.cn
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Vector 除了提供了同步外, 它和 ArrayList 没有任何区别, 因为它是线程安全的, 所以效率比较差, Java 推荐我们尽量使用 ArrayList. Stack
单元素容器Stack,它最常用的操作便是压入和弹出,最后压入的元素最先被弹出。你可以想象一个只上面开口的书箱,最后放进去的书一定是最先被拿到,而最先放进去的只有在全部书拿出后才能取出,这种特性被称为后进先出(LIFO)。在Java中Stack的的用法也很简单,有push()压入一个元素,用pop()弹出一个元素。然而它的设计却无法让人理解,Stack继承了Vector而不用Vector作为其中一个元素类型来实现其功能,这样造成的结果是Stack也拥有Vector的行为,也就是说你可以把Stack当作一个Vector来用,而这与Stack的用意毫无关系。这应该算为Java1(1.0/1.1)中容器类库设计者的一大失误吧,还好,这些在Java2中都有了相当大的改变观。
示例代码:
www.cdbdqn.cn
import java.util.Stack; import java.util.Iterator; import java.util.List; /**
* @desc Stack的测试程序。测试常用API的用法 *
* @author skywang */
public class StackTest {
public static void main(String[] args) { Stack stack = new Stack(); // 将1,2,3,4,5添加到栈中 for(int i=1; i<6; i++) {
stack.push(String.valueOf(i)); }
// 遍历并打印出该栈
iteratorThroughRandomAccess(stack) ;
// 查找“2”在栈中的位置,并输出该方法返回距离~栈顶最近的出现位置到栈顶的距离;栈中最上端项的距离为1。
int pos = stack.search(\
System.out.println(\ // pup栈顶元素之后,遍历栈 stack.pop();
iteratorThroughRandomAccess(stack) ; // peek栈顶元素之后,遍历栈 String val = (String)stack.peek(); System.out.println(\ iteratorThroughRandomAccess(stack) ; // 通过Iterator去遍历Stack iteratorThroughIterator(stack) ; } /**
* 通过快速访问遍历Stack */
public static void iteratorThroughRandomAccess(List list) { String val = null;
for (int i=0; i System.out.println(); } /** www.cdbdqn.cn * 通过迭代器遍历Stack */ public static void iteratorThroughIterator(List list) { String val = null; for(Iterator iter = list.iterator(); iter.hasNext(); ) { val = (String)iter.next(); System.out.print(val+\ } System.out.println(); } } 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 www.cdbdqn.cn 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 LinkedList的用途 用LinkedList做一个栈 “栈(stack)”有时也被称为“后进先出”(LIFO)的容器。就是说,最后一个被“压”进栈中的东西,会第一个“弹”出来。同其他Java容器一样,压进去和弹出来的东西都是Object,所以除非你只用Object的功能,否则就必须对弹起来的东西进行类型转换。 LinkedList的方法能直接实现栈的功能,所以你完全可以不写Stack而直接使用LinkedList。 如果你只想要栈的功能,那么继承就不太合适了,因为继承出来的是一个拥有LinkedList的所有方法的类。 用LinkedList做一个队列 队列(queue)是一个“先进先出”(FIFO)容器。也就是,你把一端把东西放进去,从另一端把东西取出来。所以你放东西的顺序也就是取东西的顺序。LinkedList有支持队列的功能的方法,所以它也能被当作Queue来用。 还能很轻易地用LinkedList做一个deque(双向队列)。它很像队列,只是你可以从任意一端添加和删除元素。