《Java學(xué)習(xí)筆記》--對(duì)象容器之ArrayList和LinkedList
Posted on 2007-12-27 23:05 wonderer 閱讀(3082) 評(píng)論(0) 編輯 收藏 所屬分類: java去SA面試的時(shí)候,面試官問(wèn)我平時(shí)用Java的什么數(shù)據(jù)結(jié)構(gòu),答曰:Vector。又問(wèn):哪有用過(guò)其他的的嗎?例如List和Map之類的。答曰:甚少。(自己汗一個(gè),沒(méi)水平)既然不會(huì)就要學(xué)習(xí)啦。
翻開《Java學(xué)習(xí)筆記》,里面對(duì)對(duì)象容器的描述不錯(cuò)。
1. ArrayList和LinkedList
ArrayList使用了數(shù)組結(jié)構(gòu)實(shí)現(xiàn)List的數(shù)據(jù)。所以ArraryList用來(lái)快速定位對(duì)象是非常有效率的。但是如果要對(duì)ArraryList中間插入或者刪除,效率會(huì)非常低。
LinkedList使用鏈表來(lái)實(shí)現(xiàn)的List。所以跟ArrayList相反,LinkedList對(duì)于插入和刪除是非常有優(yōu)勢(shì),反之對(duì)于快速定位,是LinkedList的弱項(xiàng)。
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>(); //在控制臺(tái)輸入,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功能對(duì)List進(jìn)行遍歷 for(String s:list) { //5.0的類C的輸出格式 System.out.printf("%s ",s); } } }
輸出:
Rokey@console# 一二三 Rokey@console# 三二一 Rokey@console# quit 顯示輸入:一二三 三二一
2)用LinkedList實(shí)現(xiàn)的一個(gè)字符串棧
/** * * @author Rokey * 用LinkedList構(gòu)建一個(gè)字符棧,先進(jìn)先出 */ public class StringStack { private LinkedList<String> linkList; public StringStack() { linkList = new LinkedList<String>(); } public void push(String s) { //將元素加入鏈表第一個(gè)位置 linkList.addFirst(s); } public String pop() { //刪除鏈表第一個(gè)元素,并返回 return linkList.removeFirst(); } public String top() { //返回鏈表第一個(gè)元素,但并不刪除 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(); //在控制臺(tái)輸入,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功能對(duì)List進(jìn)行遍歷 while(!stack.isEmpty()) { //5.0的類C的輸出格式 System.out.printf("%s ", stack.pop()); } } }
輸出:
Rokey@console# 一二三 Rokey@console# 三二一 Rokey@console# quit 顯示輸入:三二一 一二三