去SA面試的時候,面試官問我平時用Java的什么數(shù)據(jù)結(jié)構(gòu),答曰:Vector。又問:哪有用過其他的的嗎?例如List和Map之類的。答曰:甚少。(自己汗一個,沒水平)既然不會就要學習啦。
翻開《Java學習筆記》,里面對對象容器的描述不錯。
1. ArrayList和LinkedList
ArrayList使用了數(shù)組結(jié)構(gòu)實現(xiàn)List的數(shù)據(jù)。所以ArraryList用來快速定位對象是非常有效率的。但是如果要對ArraryList中間插入或者刪除,效率會非常低。
LinkedList使用鏈表來實現(xiàn)的List。所以跟ArrayList相反,LinkedList對于插入和刪除是非常有優(yōu)勢,反之對于快速定位,是LinkedList的弱項。
1)ArrayListDemo
public class ArrayListDemo { public static void main(String[] args) { //用Scanner類,可以輕松獲得commander的輸入 Scanner scanner = new Scanner(System.in); List<String> list = new ArrayList<String>(); //在控制臺輸入,quit退出 while(true) { System.out.print("Rokey@console# "); String input = scanner.next(); if(input.equals("quit")) { break; } list.add(input); } System.out.print("顯示輸入:"); //使用5.0的foreach功能對List進行遍歷 for(String s:list) { //5.0的類C的輸出格式 System.out.printf("%s ",s); } } }
輸出:
Rokey@console# 一二三 Rokey@console# 三二一 Rokey@console# quit 顯示輸入:一二三 三二一
2)用LinkedList實現(xiàn)的一個字符串棧
/** * * @author Rokey * 用LinkedList構(gòu)建一個字符棧,先進先出 */ public class StringStack { private LinkedList<String> linkList; public StringStack() { linkList = new LinkedList<String>(); } public void push(String s) { //將元素加入鏈表第一個位置 linkList.addFirst(s); } public String pop() { //刪除鏈表第一個元素,并返回 return linkList.removeFirst(); } public String top() { //返回鏈表第一個元素,但并不刪除 return linkList.getFirst(); } public boolean isEmpty() { //檢查鏈表是否為空 return linkList.isEmpty(); } }
public class StringStackDemo { public static void main(String[] args) { //用Scanner類,可以輕松獲得commander的輸入 Scanner scanner = new Scanner(System.in); StringStack stack = new StringStack(); //在控制臺輸入,quit退出 while (true) { System.out.print("Rokey@console# "); String input = scanner.next(); if (input.equals("quit")) { break; } stack.push(input); } System.out.print("顯示輸入:"); //使用5.0的foreach功能對List進行遍歷 while(!stack.isEmpty()) { //5.0的類C的輸出格式 System.out.printf("%s ", stack.pop()); } } }
輸出:
Rokey@console# 一二三 Rokey@console# 三二一 Rokey@console# quit 顯示輸入:三二一 一二三
posted @ 2007-12-27 23:05 wonderer 閱讀(3077) | 評論 (0) | 編輯 收藏