[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;
}
}