[java] package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; /* * 作者:鐘志鋼 * 功能:集合架構 * 時間:2013-1-26 * 1,List結構:ArrayList,LinkedList,Vector,Stack; * 2, Map結構:HashMap, Hashtable;(map,映射) * 3, set結構:HastSet,TreeSet; * 4, Queue結構:Queue介面 * 5,Hashtable與HashMap區別 * 曆史性:Hashtable出現得比較早,基於陳舊的Dictionary,HashMap是java1.2的一個介面Map的實現 * 同步性:Hashtable是同步的,安全執行緒的;HashMap是非同步,高效的 * 空值性:HashMap允許有空值(Key或vaule),Hashtable不能 * 6, ArrayList與Vector的區別 * 同步性:Vector 是同步的,安全執行緒的,ArrayList非同步,高效的 * 資料增長:在預設的情況下,Vector一倍增長,ArrayList半倍增長,存放大量資料時用Vector, * 7,集合使用總結: * 要求安全執行緒,用Vector,Hasstable * 不要求安全執行緒,不涉及並發,用ArrayList,LinkedList,HashMap * 要求有索引值對,用HashMap與Hashtable * 資料量很大,又考慮安全執行緒,用Vector */ public class 集合架構 { /** * @param args */ public static void main(String[] args) throws Exception{ //ArrayList ArrayList<Clerk> al = new ArrayList<Clerk>(); Clerk c1 = new Clerk("宋江", 50, 1000); al.add(c1);//添加到尾部 Clerk c3 = new Clerk("吳用", 45, 2000); al.add(c3);//添加到尾部 al.add(c3);//可以加相同的對象 System.out.println("al.lenght=" + al.size()); Clerk c2 = new Clerk("武松", 30, 10004.4f); al.add(0, c2);//加到指定位置,原來的會往看推 al.remove(3);//刪除相應的對象 //System.out.println(al.get(1).getName()); for(Clerk c : al){ //System.out.println(c.getName()); } //LinkedList.可序列的鏈表 LinkedList ll = new LinkedList(); ll.addFirst(c1);//加到列表最前面,相當於ArrayList中的al.add(0, c2); ll.addLast(c2);//加到最後面 ll.addLast(c2); System.out.println("LinkedList.getFirst()---"+((Clerk)ll.getFirst()).getName()); System.out.println("LinkedList.getList()---"+((Clerk)ll.getLast()).getName()); for(int i = 0; i < ll.size(); i ++){ System.out.println("LinkedLsit-for-"+((Clerk)ll.get(i)).getName()); } //ll.removeFirst(); //ll.removeLast(); ll.removeFirstOccurrence(c2);//刪除從頭開始的第一個與C2相同的元素 ll.removeLastOccurrence(c2);//刪除從後面開始的第一個與C2相同的元素 for(int i = 0; i < ll.size(); i ++){ System.out.println("LinkedLsit-for-"+((Clerk)ll.get(i)).getName()); } //Vector,向量 Vector vv = new Vector(); vv.add(c1); vv.add(c2); for(int i = 0; i < vv.size(); i ++){ System.out.println("vector-for-"+((Clerk)vv.get(i)).getName()); } //Stack,棧 Stack ss = new Stack(); ss.add(c1);//預設加到最前面,是為壓棧???可測試後似乎不是如此 ss.add(c2); for(int i = 0; i < ss.size(); i ++){ System.out.println("Stack-for-"+((Clerk)ss.get(i)).getName()); } System.out.println("stack===" + ((Clerk)ss.get(0)).getName()); //HashMap, HashMap hm = new HashMap(); hm.put("宋江", c1); hm.put("武松", c2); hm.put("宋江", c3);//當Key相同時,可疊加,但不能重複,只會代替。宋江會變成吳用 //尋找宋江的資訊 if(hm.containsKey("宋江")){ System.out.println("HashMap---" + "有宋江的資訊"); Clerk mc = (Clerk) hm.get("宋江"); }else{ System.out.println("HashMap---" + "沒有宋江的資訊"); } //遍曆HashMap,用iterator迭代器 Iterator it = hm.keySet().iterator(); while(it.hasNext()){//是否還有下一個 //取出Key String key = it.next().toString(); Clerk c = (Clerk) hm.get(key); System.out.println("HashMap==" + c.getName()); } //Hashtable,用法上與HashMap很相似 //用一個類來專門管理員工的資訊 EmpManage emp = new EmpManage(); //讀取輸入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ System.out.println("請按提示操作"); System.out.println("1:添加一個員工"); System.out.println("2:尋找一個員工"); System.out.println("3:修改一個員工工資"); System.out.println("4:刪除一個員工"); System.out.println("6: 尋找所有員工"); System.out.println("5:退出程式"); String op = br.readLine(); if(op.equals("1")){ System.out.println("請輸入名字:"); String name = br.readLine(); System.out.println("請輸入年齡:"); int age = Integer.valueOf(br.readLine()); System.out.println("請輸入薪水:"); float sal = Float.parseFloat(br.readLine()); Clerk c = new Clerk(name, age, sal); emp.addEmp(c); //System.out.println("添加成功"); }else if(op.equals("2")){ System.out.println("請輸入員工姓名"); String qname = br.readLine(); emp.info(qname); }else if(op.equals("3")){ System.out.println("請輸入要修改員工的姓名:"); String uname = br.readLine(); System.out.println("請輸入要修改的工資:"); float newsal = Float.parseFloat(br.readLine()); emp.updateSal(uname, newsal); //System.out.println("修改成功"); }else if(op.equals("4")){ System.out.println("請輸入要刪除的員工名字:"); String dname = br.readLine(); emp.delEmp(dname); //System.out.println("刪除成功"); }else if(op.equals("5")){ System.exit(0); }else if(op.equals("6")){ emp.queal(); } } } } class EmpManage{//員工管理類 private ArrayList<Clerk> al = null; public EmpManage(){ al = new ArrayList<Clerk>(); } public void queal() { for(Clerk c : al){ System.out.println("員工名:" + c.getName()+",薪水是:" + c.getSal()+ ",年齡是" + c.getAge()); } } //加入員工 public void addEmp (Clerk c ){ al.add(c); } //刪除員工 public void delEmp (String name){ boolean b = false; for(Clerk c : al){ if(c.getName().equals(name)){//String 類型資料用==比較的是地址 al.remove(c); b = true; break; } } if(!b){ System.out.println("查無此人"); }else{ System.out.println("刪除成功"); } } //顯示員工的相關資訊 public void info(String name){ boolean b = false; for(int i = 0; i < al.size(); i ++){ Clerk c = al.get(i); if(c.getName().equals(name)){ b = true; System.out.println("你尋找的員工:" + c.getName()+",薪水是:" + c.getSal()+ ",年齡是" + c.getAge()); break; } } if(!b){ System.out.println("查無此人"); }else{ System.out.println("查詢成功"); } } //修改員工工資 public void updateSal(String name , float sal){ boolean b = false; for(Clerk c : al){ if(c.getName().equals(name)){ c.setSal(sal); b = true; } } if(!b){ System.out.println("查無此人"); }else{ System.out.println("修改成功"); } } } class Clerk {//員工類 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } www.2cto.com public float getSal() { return sal; } public void setSal(float sal) { this.sal = sal; } private int age; private float sal; public Clerk (String name, int age, float sal){ this.age = age; this.name = name; this.sal = sal; } }