Posted on 2007-12-27 23:05
wonderer 閱讀(3078)
評論(0) 編輯 收藏 所屬分類:
java
去SA面試的時候,面試官問我平時用Java的什么數據結構,答曰:Vector。又問:哪有用過其他的的嗎?例如List和Map之類的。答曰:甚少。(自己汗一個,沒水平)既然不會就要學習啦。
翻開《Java學習筆記》,里面對對象容器的描述不錯。
1. ArrayList和LinkedList
ArrayList使用了數組結構實現List的數據。所以ArraryList用來快速定位對象是非常有效率的。但是如果要對ArraryList中間插入或者刪除,效率會非常低。
LinkedList使用鏈表來實現的List。所以跟ArrayList相反,LinkedList對于插入和刪除是非常有優勢,反之對于快速定位,是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實現的一個字符串棧
/**
*
* @author Rokey
* 用LinkedList構建一個字符棧,先進先出
*/
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
顯示輸入:三二一 一二三