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