泛型---集合1
结构的分类:
List结构的集合类:ArrayList,Vector,Stack,LinkedList类;
Vector:
向量类提供了三种构造方法:
public vector()
public vector(int initialcapacity,int capacityIncrement)
public vector(int initialcapacity)
使用第一种方法系统会自动对向量进行管理,若使用后两种方法。则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时。系统会扩充向量对象存储容量。
参数capacityincrement给定了每次扩充的扩充值。当capacityincrement为0的时候,则每次扩充一倍,利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户的使用:
public final synchronized void removeElement(Object obj) 从向量中删除obj,若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。
Map结构的集合类:HashMap,Hashtable(注意t不大写)类;
set结构的集合类:HashSet,TreeSet类
Queue结构的集合类:Queue接口
ArrayList,Vector(英语意思是向量),LinkedList,Stack他们的基本方法跟ArrayList差不多一样;
LinkedList比ArrayList多addFirst()与addLast()方法,remove,get方法也是一样;
ArrayList与Vector的区别:
1,同步性:
Vector是同步的,而arrayList是异步的;
2,数据增长:
从内部实现机制来讲ArrayList与Vector都是使用数组Array来控制集合中的对象。当向这两种类型增加元素的时候,如果元素的数目超过了内部数组目前的的长度,他们都需要增加扩展内部数组的长度,Vector增加100%,而ArrayList是50%;
HashMap与Hashtable
注意:HashMap中的Key不能一样,会覆盖前边的那个一样的key的对象,同时HashMap保存的不是按照顺序保存的。而ArrayList可以让一个对象add两次,不会发生覆盖;
HashMap h=new HashMap();
h.put("s001",new Employ("s001","lu",1000));
h.put("s002",new Employ("s002","liu",2000));
if(h.containsKey("s001")){
//不用是用for循环进行遍历了
System.out.println("z这个员工的信息是:");
//get方法得到的是Object,要进行强制转换
Employ e=(Employ)h.get("s001");
System.out.println(e.getName());
}
//不能是用for进行遍历,get方法为get(key),无法遍历
/*for(int i=0;i<h.size();i++)
h.get(key);
*/
//遍历HashMap中的key与value
Iterator i=h.keySet().iterator();
//hasNext()返回一个boolean值
while(i.hasNext()){
// 取出key,这里的next()方法得到的是一个Object
String str=i.next().toString();
//通过key取出value
Employ e=(Employ)h.get(str);
System.out.println(e.getName());
System.out.println(e.getNumber());
System.out.println(e.getSal());
}
}
}
HashMap与Hashtable的区别:
1,Hashtable是同步的,这个类的一些方法保证了Hashtable中的对象是线程安全的。而hashMap(不需要线程安全的时候选它,这样可以避免由于带的不必要的性开销,从而提 高效率)是异步的,因此hashMap的对象并不是线程安全的。
2,Hashtable的key与value不能放null,而HashMap行。
集合总结:
1.如果要求是线程安全的:Vector,Hashtable;
2,如果不要求线程安全:ArrayList,HashMap,LinkedList;
3.如果要求是用键值时使用HashMap和Hashtable;
4.如果数据量很大,又要线程安全,使用Vector;