JAVA集合框架之List 下载本文

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(双向队列)。它很像队列,只是你可以从任意一端添加和删除元素。