北大青鸟y2-java课件4前沿技术tp2v_第1页
北大青鸟y2-java课件4前沿技术tp2v_第2页
北大青鸟y2-java课件4前沿技术tp2v_第3页
北大青鸟y2-java课件4前沿技术tp2v_第4页
北大青鸟y2-java课件4前沿技术tp2v_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java的泛型第二章2回顾代码填空,完成@Test注记的代码importjava.lang.annotation.*;@Retention(_______________________)@Target(_______________________)public____________________Test{}RetentionPolicy.RUNTIMEElementType.METHOD@interface3本章任务使用泛型实现一个通用的求极值算法。使用泛型改写S2JSP课程的新闻发布系统的有关集合的代码。4掌握JavaSE的泛型原理使用泛型集合API操纵对象数据本章目标5为什么需要泛型?在JavaSE5.0以前操作集合的缺点:从集合中取出对象,需要执行类型转换操作:由于没有类型检查,可以向集合添加任意对象,例如添加一个文件对象,但get方法取出的File对象转换为String会产生运行错误:ArrayListfiles=newArrayList();...Stringfilename=(String)files.get(0);files.add(newFile("..."));6基于泛型的解决方案泛型提供了类型参数只能将String类型对象存入集合,不能存储“大象”,“File”等编译器可以发现如下错误取出对象的类型为String,无需执行类型转换ArrayList<String>files=newArrayList<String>();Stringfilename=files.get(0);files.add(newFile("..."));精简代码错误!7定义一个泛型类Pair类具有两个成员,类型待定使用privateTfirst表示first的类型为参数TpublicclassPair<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;}}8实现通用的求极值算法编写一个泛型方法,能够对数组求最大值和最小值classArrayAlg{publicstatic<TextendsComparable>Pair<T>minmax(T[]a){if(a==null||a.length==0){returnnull;}Tmin=a[0];Tmax=a[0];for(inti=1;i<a.length;i++){if(pareTo(a[i])>0){min=a[i];}if(pareTo(a[i])<0){max=a[i];}}returnnewPair<T>(min,max);}}大小大小9使用泛型方法创建一个日历的数组,求出最大和最小的日期Pair<GregorianCalendar>mm使用GregorianCalendar为Pair<T>传递类型参数Java.util.GregorianCalendar实现了接口parable<T>GregorianCalendar[]birthdays={newGregorianCalendar(1906,Calendar.DECEMBER,9),newGregorianCalendar(1815,Calendar.DECEMBER,10),newGregorianCalendar(1903,Calendar.DECEMBER,3),newGregorianCalendar(1910,Calendar.JUNE,22),};Pair<GregorianCalendar>mm=ArrayAlg.minmax(birthdays);System.out.println("min="+mm.getFirst().getTime());System.out.println("max="+mm.getSecond().getTime());PairTest2.java10小结如何求出一个int类型数组的最大值和最小值?如何求出一个String类型数组的最大值和最小值(字典顺序)?String[]words={"able","word","excel","course","java","c#"};Pair<String>mm=ArrayAlg.minmax(words);System.out.println("firstword="+mm.getFirst());System.out.println("lastword="+mm.getSecond());ArrayAlg.minmax方法的优点是什么?11JavaSE5.0以后的集合没有使用泛型的Java代码警告(Eclipse环境中)系统提示使用泛型集合12泛型List如何定义泛型List对象List<T>List<Integer>numbers=newArrayList<Integer>();for(inti=1;i<=49;i++){numbers.add(i);}Collections.shuffle(numbers);List<Integer>bination=numbers.subList(0,6);Collections.sort(bination);System.out.println(bination);存储Integer的List13泛型List接口和ArrayList类

回顾S2JSP课程的新闻发布系统的存储对象,基于泛型实现创建类型:新闻标题包含属性:ID、名称、创建者、创建时间publicclassFirstLevelTitle{privateintid;privateStringtitleName;privateStringcreater;privateDatecreateTime;publicFirstLevelTitle(intid,StringtitleName,Stringcreater,DatecreateTime){this.id=id;this.titleName=titleName;this.creater=creater;this.createTime=createTime;}publicStringgetTitleName(){returntitleName;}publicvoidsetTitleName(StringtitleName){this.titleName=titleName;}}14List接口和ArrayList类3-1具体实现按照顺序依次添加各类新闻标题获取新闻标题的总数publicclassFirstLevelTitleDB{publicstaticvoidmain(String[]args){FirstLevelTitlecar=newFirstLevelTitle(1,"汽车","管理员",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理员",newDate());List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.add(test); System.out.println("新闻标题数目为:"+newsTitleList.size()+"条");…}}15List接口和ArrayList类3-2具体实现根据位置获取相应新闻标题逐条打印每条新闻标题的名称publicclassFirstLevelTitleDB{publicstaticvoidmain(String[]args){…System.out.println("新闻标题数目为:"+newsTitleList.size()+"条");print(newsTitleList);}publicstaticvoidprint(List<FirstLevelTitle>newsList){for(inti=0;i<newsList.size();i++){FirstLevelTitletitle=newsList.get(i);System.out.println(i+1+":"+title.getTitleName());}}…根据位置获取对象。从集合中取出后,不需要进行强制类型转换。1216常见错误…FirstLevelTitlecar=newFirstLevelTitle(1,"汽车","管理员",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理员",newDate());List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.add(test); print(newsTitleList);…publicstaticvoidprint(ListnewsList){for(inti=0;i<newsList.size();i++){FirstLevelTitletitle=newsList.get(i);System.out.println(i+1+":"+title.getTitleName());}}参数List接口没有使用泛型。17基于foreach循环简化集合的输出如何使用foreach循环简化代码?publicstaticvoidprint(List<FirstLevelTitle>newsList){inti=0;

for(FirstLevelTitletitle:newsList){System.out.println(i+1+":"+title.getTitleName());}}18List接口和ArrayList类3-3实现如下功能在指定的位置添加新闻标题判断是否已经存储了某条新闻标题删除指定位置处的某一新闻标题FirstLevelTitlehouse=newFirstLevelTitle(3,"房产","网站管理员",newDate());List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(2,house);if(newsTitleList.contains(test)){System.out.println("有高考的新闻");}else{ System.out.println("没有高考的新闻");}newsTitleList.remove(1);在指定的位置添加元素。在指定的位置删除元素。19常见错误请指出下面Java代码中的错误:FirstLevelTitlecar=newFirstLevelTitle(1,"汽车","管理员",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理员",newDate())List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.add(2,test);System.out.println("最后一条新闻为:"+newsTitleList.get(2).getTitleName());指定的位置必须是0到newsTitleList.size()之间数字。获取元素的位置必须是0到newsTitleList.size()-1之间的数字。20List接口和LinkedList类2-1

具体实现添加头条、以及最末条新闻标题FirstLevelTitlecar=newFirstLevelTitle(1,"汽车","管理员",newDate());FirstLevelTitlemedical=newFirstLevelTitle(2,"医学","管理员",newDate());LinkedList<FirstLevelTitle>newsTitleList=newLinkedList<FirstLevelTitle>();newsTitleList.addFirst(car);newsTitleList.addLast(medical);21List接口和LinkedList类2-2

具体实现获取头条、以及最末条新闻标题删除头条、以及最末条新闻标题LinkedList<FirstLevelTitle>newsTitleList=newLinkedList<FirstLevelTitle>();…FirstLevelTitlefirst=newsTitleList.getFirst();System.out.println("头条的新闻标题为:"+first.getTitleName());FirstLevelTitlelast=newsTitleList.getLast();System.out.println("排在最后的新闻标题为:"+last.getTitleName());newsTitleList.removeFirst();newsTitleList.removeLast();

22常见错误FirstLevelTitlecar=newFirstLevelTitle(1,"汽车","管理员",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理员",newDate());List<FirstLevelTitle>newsTitleList=newLinkedList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.addFirst(test); …List接口中没有定义addFirst方法。请指出下面Java代码中的错误:23小结编写一个List类型的对象存储同学录(存储同学的姓名和联系方式),输出同学录的列表到控制台。24Map接口和HashMap类5-1确定存储对象创建类型:AccpStudent包含属性:中心名称、学员姓名publicclassAccpStudent{privateStringname;//学员姓名privateStringschool;//中心名称publicAccpStudent(Stringname,Stringschool){=name;this.school=school;}publicStringtoString(){ returnschool+"毕业的"+name;}}重写Object的toString()方法,用于输出调试和描述信息25Map接口和HashMap类5-2具体实现把英文名称与学员对象按照“键-值对”的方式存储在HashMap中分别打印键集、值集、以及键-值对集合AccpStudentstudent1=newAccpStudent("李明","西苑中心");AccpStudentstudent2=newAccpStudent("刘丽","西苑中心");Map<String,AccpStudent>students=newHashMap<String,AccpStudent>();students.put("Jack",student1);students.put("Rose",student2);System.out.println("键集:"+students.keySet());System.out.println("值集:"+students.values());System.out.println("键-值对集合:"+students);键集:[Jack,Rose]值集:[西苑中心毕业的李明,西苑中心毕业的刘丽]键-值对集合:{Jack=西苑中心毕业的李明,Rose=西苑中心毕业的刘丽}26Map接口和HashMap类5-3实现如下功能判断是否存在某个键,如果是,则根据键获取相应的值根据键、删除某条记录AccpStudentstudent1=newAccpStudent("李明","西苑中心");AccpStudentstudent2=newAccpStudent("刘丽","西苑中心");Map<String,AccpStudent>students=newHashMap<String,AccpStudent>();students.put("Jack",student1);students.put("Rose",student2);Stringkey="Jack";if(students.containsKey(key))System.out.println(students.get(key));students.remove(key);System.out.println("键-值对集合:"+students);西苑中心毕业的李明键-值对集合:{Rose=西苑中心毕业的刘丽}27Map接口和HashMap类5-4Map<String,Employee>staff=newHashMap<String,Employee>();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论