![Java程序设计课件项目5Java泛型与集合框架_第1页](http://file4.renrendoc.com/view11/M00/1F/01/wKhkGWWCzR-AYP0EAADs0fgPqTc343.jpg)
![Java程序设计课件项目5Java泛型与集合框架_第2页](http://file4.renrendoc.com/view11/M00/1F/01/wKhkGWWCzR-AYP0EAADs0fgPqTc3432.jpg)
![Java程序设计课件项目5Java泛型与集合框架_第3页](http://file4.renrendoc.com/view11/M00/1F/01/wKhkGWWCzR-AYP0EAADs0fgPqTc3433.jpg)
![Java程序设计课件项目5Java泛型与集合框架_第4页](http://file4.renrendoc.com/view11/M00/1F/01/wKhkGWWCzR-AYP0EAADs0fgPqTc3434.jpg)
![Java程序设计课件项目5Java泛型与集合框架_第5页](http://file4.renrendoc.com/view11/M00/1F/01/wKhkGWWCzR-AYP0EAADs0fgPqTc3435.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计
项目5Jav泛型和集合框架主要内容:一、泛型二、泛型集合类三、工具类(1)泛型类声明型类的声明格式如下:
class类名<泛型列表>例如:classA<E>{…}其中,A是泛型类的名称,E是其中的泛型列表中一个类型参数,它可以是任何类或接口,但不能是基本数据类型。泛型声明时,E可以作为类的成员变量的类型、方法的类型以及局部变量的类型。泛型列表也可以有多个,必须用逗号隔开,格式如下:classA<E,F>{…}任务1泛型1、泛型类泛型类的结构和普通类完全类似,由成员变量和方法构成。例如:我们声明一个泛型类Pair,代码如下:classPair<T>{ privateTfirst; privateTsecond; publicPair(){first=null;second=null;} publicPair(Tfirst,Tsecond){this.first=first;this.second=second;} publicTgetFirst(){returnfirst;} publicTgetSecond(){returnsecond;} publicvoidsetFirst(TnewValue){first=newValue;} publicvoidsetSecond(TnewValue){second=newValue;}}任务1泛型(2)使用泛型类声明对象与普通类不同的是,使用泛型类型声明和创建对象时,类名后多了一对“<>”符号。而且要用具体的类型替换“<>”符号中的泛型。如:Pair<String>pair;//声明一个泛型对象pair=newPair<String>("Hello","Java");//创建泛型对象例5.1泛型类的应用。publicclassPairTest{publicstaticvoidmain(String[]args){Pair<String>pair=newPair<String>("Hello","Java"); System.out.println("first="+pair.getFirst()); System.out.println("second="+pair.getSecond());}}程序运行结果为:first=Hellosecond=Java任务1泛型前面已经介绍了如何定义一个泛型类。实际上,还可以定义一个带有参数类型的方法即泛型方法。泛型方法使得该方法能够独立于类而产生变化,泛型方法所在的类可以是泛型类,也可以不是泛型类。创建一个泛型方法常用的形式如下:[访问修饰符][static][final]<泛型列表>返回值方法名([形式参数列表])任务1泛型2、泛型方法例5.2泛型方法的应用。classGenericMethod{public<T>voidf(Tx){ System.out.println(x.getClass().getName());}}publicclassGenericMethodTest{ publicstaticvoidmain(String[]args){ GenericMethodgm=newGenericMethod(); gm.f(""); gm.f(1); gm.f(1.0f); gm.f('c'); gm.f(gm); }}程序运行结果为:java.lang.Stringjava.lang.Integerjava.lang.Floatjava.lang.CharacterGenericMethod任务1泛型除了泛型类和泛型方法,还可以使用泛型接口。泛型接口的定义与泛型类非常相似,它的声明形式如下:
interface接口名<泛型列表>下面我们创建了一个名为MinMax的接口,用来返回某个对象集的最小值或最大值。代码如下:interfaceMinMax<TextendsComparable<T>>{ Tmin(); Tmax();}MinMax接口类型参数T是有界类型,它必须是Comparable的子类。任务1泛型3、泛型接口接下来我们定义一个类MyClass来实现这个接口,代码如下:
classMyClass<TextendsComparable<T>>implementsMinMax<T>{ T[]vals; MyClass(T[]ob){ vals=ob; } publicTmin(){ Tval=vals[0]; for(inti=1;i<vals.length;++i) if(vals[i].compareTo(val)<0)val=vals[i]; returnval; } publicTmax(){ Tval=vals[0]; for(inti=1;i<vals.length;++i) if(vals[i].compareTo(val)>0)val=vals[i]; returnval; }}任务1泛型例5.3泛型接口的应用。publicclassMyClassTest{publicstaticvoidmain(Stringargs[]){Integerinums[]={56,47,23,45,85,12,55};Characterchs[]={'x','w','z','y','b','o','p'};MyClass<Integer>iob=newMyClass<Integer>(inums);MyClass<Character>cob=newMyClass<Character>(chs);System.out.println("Maxvalueininums:"+iob.max());System.out.println("Minvalueininums:"+iob.min());System.out.println("Maxvalueinchs:"+cob.max());System.out.println("Minvalueinchs:"+cob.min());}}出现运行结果为:Maxvalueininums:85Minvalueininums:12Maxvalueinchs:zMinvalueinchs:b任务1泛型
Java集合框架由两种类型构成,一个是Collection,另一个是Map。它们层次关系如下图。
任务2泛型集合类1、Collection<E>接口集合可理解为一个容器,该容器主要指映射(map)、集合(set)、列表(list)、散列表(hashtable)等抽象数据结构。容器可以包含有多个元素,这些元素通常是一些Java对象。
Collection接口是构造集合框架的基础。它声明所有集合类都将拥有的核心方法,这些方法的定义如下表所示。
任务2泛型集合类集合是指一个不包含重复元素的对象集合,是数学上“集合”概念的一种抽象。其本身是无序的。在集合框架中,HashSet类和TreeSet类实现了Set接口。这两个类定义在java.util包中一般情况下,采用HashSet类创建一个无序的集合对象,采用TreeSet类创建有序的集合对象。这里我们只介绍比较常用的HasSet类。HashSet类所创建的类集使用散列表进行存储。HashSet类的构造方法如下:●HashSet()创建一个空的哈希集合,装填因子(loadfactor)是0.75。●HashSet(Collectionc)用指定的集合c的元素创建一个哈希集合。任务2泛型集合类2、Set<E>接口
●HashSet(intinitialCapacity)创建一个哈希集合,并指定的集合初始容量。●HashSet(intinitialCapacity,floatloadFactor)创建一个哈希集合,并指定的集合初始容量和装填因子。例5.4从命令行输入若干英文单词,输出每个重复的单词,不同单词的个数及消除重复单词后的列表。
importjava.util.*;publicclassFindDups{publicstaticvoidmain(Stringargs[]){Set<String>hs=newHashSet<String>(); for(Stringa:args){ if(!hs.add(a)){ System.out.println("Duplicate:"+a); } }System.out.println(hs.size()+"distinctwords:"+hs);}}任务2泛型集合类如果使用下面命令运行程序:C:\>javaFindDupsyoucameyousawyouleft程序运行结果为:Duplicate:youDuplicate:you4distinctwords:[left,came,saw,you]任务2泛型集合类3、List<E>接口
List<E>接口也是Collection<E>接口的子接口,它实现一种顺序表的数据结构,有时也称为序列。存放在List中的所有元素都有一个下标(下标从0开始),可以通过下标访问List中的元素。List中可以包含重复元素。List接口及其实现类的层次结构如下图所示:任务2泛型集合类在列表接口中,除了在集合中所定义的方法外,还有一系列针对列表中特定位置的方法。列表List<E>接口定义在java.util包中,这些方法如下表所示。任务2泛型集合类任务2泛型集合类
List接口中只是声明了一些列表元素存取的方法,而没有具体的实现,要真正实现对列表的操作还需要通过其实现类,下面列出了几种List接口的实现类。①ArrayList类ArrayList类继承AbstractList并实现List接口。它提供了一种数组列表的数据结构。ArrayList的构造方法如下:●ArrayList()创建一个空的数组列表对象。●ArrayList(Collectionc)用集合c中的元素创建一个数组列表对象。●ArrayList(intinitialCapacity)创建一个空的数组列表对象,并指定初始容量。任务2泛型集合类例5.5ArraryList类的应用。importjava.util.*;publicclassListDemo{publicstaticvoidmain(Stringargs[]){Collectionc=newArrayList();Stringweekday[]=newString[]{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};for(inti=0;i<weekday.length;i++)c.add(weekday[i]);System.out.println(c);Stringweekend[]=newString[]{"Saturday","Sunday"};Collectionc1=newArrayList();Collectionc2=newArrayList();c1.add(weekend[0]);c1.add(weekend[1]);System.out.println(c1);c.removeAll(c1);c2=newArrayList(c);System.out.println(c);System.out.println("c.containsAll(c1)="+c.containsAll(c1));System.out.println(c2);c.addAll(c1);System.out.println(c);System.out.println("c.containsAll(c1)="+c.containsAll(c1));c.retainAll(c2);System.out.println(c);}}任务2泛型集合类程序运行结果为:[Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday][Saturday,Sunday][Monday,Tuesday,Wednesday,Thursday,Friday]c.containsAll(c1)=false[Monday,Tuesday,Wednesday,Thursday,Friday][Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday]c.containsAll(c1)=true[Monday,Tuesday,Wednesday,Thursday,Friday]②LinkedList类ArrayList类是通过数组方式来实现的,LinkedList类则是通过链表结构来实现。一般说来,若对一个列表结构的开始和结束处有频繁地添加和删除操作时,一般选用LinkedList类所实例化的对象表示该列表。任务2泛型集合类LinkedList类扩展了AbstractSequentialList类并实现List接口,其构造方法如下:●LinkedList()创建一个空的链表。●LinkedList(Collectionc)用集合c中的元素创建一个链表。通常利用LinkedList对象表示一个堆栈(stack)或队列(queue)。对此LinkedList类中特别定义了一些方法,而这是ArrayList类所不具备的。这些方法用于在列表的开始和结束处添加和删除元素,其方法定义如下:●publicvoidaddFirst(Objecto)将指定元素插入此列表的开头。任务2泛型集合类●publicvoidaddLast(Objecto)将指定元素添加到此列表的结尾。●publicObejctremoveFirst()移除并返回此列表的第一个元素。●publicObjectremoveLast()移除并返回此列表的最后一个元素。●publicObejctgetFirst()获得列表的第一个元素。●publicObjectgetLast()获得列表的最后一个元素。任务2泛型集合类例5.6LinkedList类的应用。
importjava.util.LinkedList;publicclassLinkedListDemo{ publicstaticvoidmain(String[]args){ LinkedList<String>queue=newLinkedList<String>(); queue.addFirst("set"); queue.addLast("HashSet"); queue.addLast("TreeSet"); queue.addFirst("List"); queue.addLast("ArrayList"); queue.addLast("LinkedList"); queue.addLast("map"); queue.addFirst("collection"); System.out.println(queue); queue.removeLast(); queue.removeFirst(); System.out.println(queue); }}任务2泛型集合类程序运行结果为:[collection,List,set,HashSet,TreeSet,ArrayList,LinkedList,map][List,set,HashSet,TreeSet,ArrayList,LinkedList]4、Map<K,E>接口(1)Map<K,E>接口映射接口是与Collection接口相并列的一个接口,该接口描述了不重复的键到值的映射。一个映射对象中不能包含重复的键,且每个键只能映射到一个值。在映射中“键—值”对所描述的对象称为条目(Entry)。其主要方法见下表所示。任务2泛型集合类任务2泛型集合类(2)HashMap类
HashMap类的构造方法如下:●HashMap()创建一个空的映射对象,使用缺省的装填因子(0.75)。●HashMap(intinitialCapacity)用指定的初始容量和缺省的装填因子(0.75)创建一个映射对象。●HashMap(intinitialCapacity,floatloadFactor)用指定的初始容量和指定的装填因子创建一个映射对象。●HashMap(Mapt)用指定的映射对象创建一个新的映射对象。任务2泛型集合类例5.7HashMap类的应用。
importjava.util.*;publicclassFrequency{publicstaticvoidmain(Stringargs[]){ Map<String,Integer>m=newHashMap<String,Integer>(); //由命令行参数初始化单词频率表
for(Stringa:args){ Integerfreq=m.get(a); m.put(a,(freq==null?1:freq+1)); } System.out.println(m.size()+"distinctwords:"); System.out.println(m);}}使用下面的命令行运行该程序:C:\>javaFrequencynoneedtolightanightlightonalightnightliketonight.程序运行结果为:9distinctwords:{no=1,a=2,need=1,light=3,like=1,night=2,tonight.=1,to=1,on=1}
Collections工具类,是集合对象的工具类,提供了操作集合的工具方法,例如排序,复制和反转排序等方法。Collections工具类常用的方法如下:●publicstaticvoidsort(Listlist)根据数据元素的自然顺序对指定类集按升序进行排序。●publicstaticvoidshuffle(Listlist)对指定类集进行随机排序。●publicstaticvoidreverse(Listlist)反转指定类集中数据元素的顺序。●publicstaticObjectmax(Collectioncoll)根据数据元素的自然顺序,返回给定Collection的最大元素。●publicstaticObjectmin(Collectioncoll)根据数据元素的自然顺序返回给定Collection的最小元素。任务3工具类1、Collection工具类
●publicstaticintbinarySearch(Listlist,Objectkey)使用二分搜索法搜索指定类集,以获得指定key的对象。●publicstaticintindexOfSubList(Listsource,Listtarget)返回指定源类集中第一次出现指定目标类集的起始位置,如果没有返回-1。●publicstaticintlastindexOfSubList(Listsource,Listtarget)返回指定源类集中最后一次出现指定目标类集的起始位置,如果没有返回-1。●publicstaticvoidcopy(Listsource,Listtarget)将所有数据元素从一个类集source复制到另一个类集target。●publicstaticvoidfill(Listlist,Objectobj)使用指定数据元素obj替换指定类集中的所有数据元素。任务3工具类例5.8Collections工具类应用。
importjava.util.*;publicclassTestCollections{publicstaticvoidmain(String[]args){ Listlist=newArrayList(); list.add("w");list.add("o");list.add("r"); list.add("l");list.add("d"); System.out.println("排序前:"+list); System.out.println("该集合中的最大值:"+Collections.max(list)); System.out.println("该集合中的最小值:"+Collections.min(list)); Collections.sort(list); System.out.println("排序后:"+list); //二分查找,要求查找前集合是自然有序排列
System.out.println("r在集合中的索引为:"+Collections.binarySearch(list,"r")); Collections.shuffle(list); System.out.println("随机排序结果:"+list); Collections.reverse(list);任务3工具类
System.out.println("逆序结果:"+list); Collections.swap(list,1,4); System.out.println("索引号为1、4的元素交换后:"+list); Collections.replaceAll(list,"w","d"); System.out.println("把w都换成d后结果:"+list); Collections.fill(list,"s"); System.out.println("全部填充为s后的结果:"+list);}}出现运行结果为:排序前:[w,o,r,l,d]该集合中的最大值:w该集合中的最小值:d排序后:[d,l,o,r,w]r在集合中的索引为:3随机排序结果:[w,d,r,l,o]逆序结果:[o,l,r,d,w]索引号为1、4的元素交换后:[o,w,r,d,l]把w都换成d后结果:[o,d,r,d,l]全部填充为s后的结果:[s,s,s,s,s]任务3工具类
Arrarys工具类,是数组的工具类,提供了对数组的工具方法,例如排序,二分查找等。Arrarys工具类常用方法如下:●publicstaticvoidfill(int[]a,intval)用指定的val值填充数组中的每个元素。●publicstaticvoidfill(int[]a,intfromIndex,inttoIndex,intval)用指定的val值填充数组中的下标从fromIndex开始到toIndex为止的每个元素。●publicstaticvoidfill(Object[]a,Objectval)用指定的val值填充对象数组中的每个元素。●publicstaticvoidfill(Object[]a,intfromIndex,inttoIndex,Objectval)用指定的val值填充对象数组中的下标从fromIndex开始到toIndex为止的每个元素。任务3工具类2、Arrays工具类●publicstaticvoidsort(Object[]a)对数组a按自然顺序排序。●publicstaticvoidsort(Object[]a,intfromIndex,inttoIndex)对数组a中的元素从其始下标fromIndex到终止下标toIndex之间的元素排序。●publicstaticintbinarySearch(int[]a,intkey)对已排序的int类型数组使用二分搜索法搜索,如果找到指定的值就返回其所在的索引位置,否则返回负值。●publicstaticintbinarySearch(Object[]a,Objectkey)对已排序的对象数组使用二分搜索法搜索,如果找到指定的值就返回其所在的索引位置,否则返回负值。●
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度农业项目评标保密协议范本
- 离婚协议书债务处理
- 法人邀约合同(2篇)
- 2025年度房屋租赁合同范本集(含税费承担)3篇
- 2025至2030年中国耐黄变白面漆数据监测研究报告
- 2025年度景区园林景观设计与施工与质量监督服务合同3篇
- 2025至2030年内抽式单面瓦楞机项目投资价值分析报告
- 2025至2030年光子计数多道平均器项目投资价值分析报告
- 2025年铰项目可行性研究报告
- 二零二五年度货车司机聘用合同范本(专业)2篇
- 搞笑小品剧本《大城小事》台词完整版
- 物业服务和后勤运输保障服务总体服务方案
- 人大代表小组活动计划人大代表活动方案
- 《大模型原理与技术》全套教学课件
- 2023年护理人员分层培训、考核计划表
- 《销售培训实例》课件
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解)
- 【经典文献】《矛盾论》全文
- Vue3系统入门与项目实战
- 2024年宁夏回族自治区中考英语试题含解析
- 光伏发电项目试验检测计划
评论
0/150
提交评论