2009年浙江工业大学软件学院Java程序设计视频教程Java程序设计视频教程本讲主题:包装类与集合类主讲教师:黄洪2包装类包装类将基本数据类型包装成引用数据类型。每个包装类对象都封装了基本类型的一个值。基本数据类型对应的包装类booleanBooleanbyteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDouble3包装类包装类中包含了很多有用的方法和常量。创建相应的包装类对象(Xxx表示包装类的名称)Xxx(avalue)Xxx(Strings)类型的最大值与最小值MIN_VALUEMAX_VALUE将字符串转换成该类型对应的基本数据类型publicstaticxxxparseXxx(Strings),其中Xxx表示基本数据类型名称将该类型的对象转换成字符串publicStringtoString()publicstaticStringtoString(xxxanxxxValue)publicstaticStringtoString(inti,intradix)//同时实现数制转换4包装类例:利用包装类Integer的parseInt方法,将字符串转换为整数。publicstaticintparseInt(Strings)throwsNumberFormatException请大家回去自己仔细研究各包装类及其方法。5classTestInteger{publicstaticvoidmain(String[]args){inti1=Integer.parseInt(args[0]);inti2=Integer.parseInt(args[1]);System.out.println(i1+i2);}}6集合类一个集合类对象用于表示了一组对象的集合,是对象的容器。7SetSet不能包含重复的元素。Set接口定义:publicinterfaceSet{//基本方法intsize();booleanisEmpty();booleancontains(Objectelement);booleanadd(Objectelement);booleanremove(Objectelement);Iteratoriterator();…}8ListList是有序的集合,元素可以重复。List接口定义:publicinterfaceListextendsCollection{Objectget(intindex);Objectset(intindex,Objectelement);//Optionalvoidadd(intindex,Objectelement);//OptionalObjectremove(intindex);//OptionalabstractbooleanaddAll(intindex,Collectionc);//Optional//SearchintindexOf(Objecto);intlastIndexOf(Objecto);…}List的实现:Vector,ArrayList,LinkedList9Vector与ArrayListVector与ArrayList功能类似,但Vector是多线程安全的,具有多线程同步机制,能够保证多个线程对同一个Vector对象操作时数据的正确性。而ArrayList则没有处理多线程同步问题。本讲介绍Vector10向量VectorVector是一个类,功能类似数组,但存在以下区别元素的个数可变元素的类型必须是引用类型Vector对象中可以存放的元素个数称为向量的容量(capacity)Vector对象中实际元素的个数称为向量的长度(size)当长度超出容量时,向量对象的容量会自动扩大,一次扩大一个容量增量;容量增量为0时,容量扩大一倍。Vector类在java.util包中,使用时要引入(在类前面用importjava.util.Vector;)或用完整的名称。11向量变量的声明声明格式:Vector向量元素的数据类型变量名例:声明一个元素类型为字符串的向量变量vsVectorStringvs;下面的声明是错误的,因为int不是引用类型。Vectorintvi;下面的声明被允许,但会出现编译警告Vectorvo;12向量的构造方法创建初始容量为10,默认增量为0的向量对象:newVector元素类型()创建初始容量为initialCapacity,默认增量为0的向量对象:newVector元素类型(intinitialCapacity)创建初始容量为initialCapacity,默认增量为capacityInc的向量对象:newVector元素类型(intinitialCapacity,intcapacityInc)构造方法不指定元素类型会出现编译警告13声明向量变量并实例化向量对象的例子变量vs引用一个元素类型为字符串的向量,其初始容量为10,默认增量为0:VectorStringvs=newVectorString();变量vo引用一个没有指定元素类型的向量,其初始容量为16,默认增量为8:Vectorvo=newVector(16,8);14对向量的主要操作增加元素将指定元素追加到此向量的末尾。booleanadd(Eo)插入元素在此向量的指定位置插入指定的元素,和数组一样index的取值从0开始。voidadd(intindex,Eelement)修改元素用指定的元素替换此向量中指定位置index处的元素。Eset(intindex,Eelement)15对向量的主要操作(续)删除元素移除此向量中指定位置的元素。Eremove(intindex)移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。booleanremove(Objecto)从此向量中移除所有元素。voidclear()16对向量的主要操作(续)查询返回向量中指定位置的元素。Eget(intindex)判断指定的对象是否为此向量中的某个元素。booleancontains(Objectelem)返回此向量的第一个元素(位于索引0处的项)。EfirstElement()返回此向量的最后一个元素。ElastElement()17对向量的主要操作(续)查询元素的位置索引返回给定参数的第一个匹配项的索引,使用equals方法测试相等性。没有匹配项则返回-1。intindexOf(Objectelem)返回给定参数的第一个匹配项的索引,从index处开始匹配,并使用equals方法测试其相等性。没有匹配项则返回-1intindexOf(Objectelem,intindex)返回指定的对象在此向量中最后一个匹配项的索引。没有匹配项则返回-1。intlastIndexOf(Objectelem)从后往前搜索指定的对象并返回其索引。从指定的索引处开始搜索。没有匹配项则返回-1。intlastIndexOf(Objectelem,intindex)18对向量的主要操作(续)查询向量的相关信息返回此向量的当前容量。intcapacity()返回此向量中的元素个数。intsize()测试此向量是否不包含元素。booleanisEmpty()19对向量的主要操作(续)改变向量的长度或容量设置此向量的长度。如果新长度大于老长度则尾部添加null;如果新长度小于老长度则尾部元素删除;voidsetSize(intnewSize)对此向量的容量进行微调,使其等于向量的当前大小。voidtrimToSize()增加此向量的容量(如有必要),以确保其至少能够保存最小容量参数指定的元素个数。voidensureCapacity(intminCapacity)20向量使用示例importjava.util.Vector;classTestVector{publicstaticvoidmain(String[]args){VectorStringvs=newVectorString(16,8);vs.add(1);vs.add(2);vs.add(1,3);System.out.println(vs.toString());if(vs.contains(3))System.out.println(\3\isanelementofvs);vs.remove(3);System.out.println(vs.toString());}}21哈希表/散列表(Hashtable)将数据按“关键字”(key)和“值”(value)配对存放,通过key可以快速找到value。其原理是建立key到value的映射。Java中实现哈希表的有三个类:Hashtable,HashMap,WeakHashMap,他们的区别有三个,详见教材P149。上述三个类在java.util包中。22哈希表变量的声明声明格式Hashtable关键字的类型,值类型变量名或者Hashtable变量名注意:哈希表的关键字和值都必须是引用类型第二种声明格式会导致编译警告23哈希表的构造方法用缺省的容量11和装填因子0.75f构造一个新的空哈希表。Hashtable关键字的类型,值类型()用指定的初始的容量和缺省的装填因子构造一个新的空哈希表。Hashtable关键字的类型,值类型(int)用指定的初始的容量和指定的装填因子构造一个新的空哈希表。Hashtable关键字的类型,值类型(int,float)注意:不指明类型也可以,但会导致出现编译警告24声明哈希表变量并实例化哈希表对象按默认的容量和装填因子创建一个哈希表对象,其关键字是String类型,值是Integer类型:HashtableString,Integerht=newHashtableString,Integer();创建一个初始容量为20,装填因子为0.8f的哈希表对象,不指定关键字和值的类型。Hashtableht=newHashtable(20,0.8f);25哈希表常用操作添加元素在该散列表中映射指定的kObject键到指定的vObject值。Vput(kObject,vObject)查找元素返回指定的键kObject在这个散列表中的映射值。Vget(kObject)删除元素从该散列表中删除键值为kObject的元素。Vremove(kObject)清空该散列表使它不包含元素。voidclear()26哈希表常用操作(续)检测检测指定的对象是否是该散列表中的一个键。booleancontainsKey(Objectkey)检测在该散列表中某些键是否映射到指定的值。booleancontains(Objectvalue)返回该散列表中的元素个数。intsize()27哈希表使用示例importjava.util.Hashtable;classTestHashtable{publicstaticvoidmain(String[]args){HashtableString,Stringht=newHashtableString,String(20,0.8f);ht.put(许斌,200726630420);ht.put(陈梦瑶,200726470204);System.out.println(ht);System.out.println(ht.get(陈梦瑶));ht.remove(陈梦瑶);System.out.println(ht.get(陈梦瑶));System.out.println(ht.containsKey(陈梦瑶));System.out.println(ht.size());}}28习题1、编写一个java成绩统计程序,输入