版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章泛型与集合框架
12.1泛型泛型〔Generics〕是在JDK1.5中推出的,其主要目的是可以建立具有类型平安的集合框架,如链表、散列映射等数据结构12.1.1泛型类可以使用“class名称<泛型列表>〞声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如:classShowObject<E>泛型类的类体和和普通类的类体完全类似,由成员变量和方法构成12.1.2泛型类声明对象和普通的类相比,泛型类声明和创立对象时,类名后多了一对“<>〞,而且必须要用具体的类型替换“<>〞中的泛型。12.1.3泛型接口可以使用“interface名称<泛型列表>〞声明一个接口,这样声名的接口称作泛型接口如interfaceListen<E>{voidlisten(Ex);}12.1.4泛型的目的Java泛型的主要目的是可以建立具有类型平安的数据结构,如链表、散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。JDK1.5是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,使代码更平安。Java推出泛型的主要目的是为了建立具有类型平安的数据结构12.2链表链表是由假设干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用,或含有一个数据并含有上一个节点的引用和下一个节点的引用数据引用引用数据null引用数据引用引用数据引用
null图12.3双链表示意图12.2.1LinkedList<E>泛型类java.util包中的LinkedList<E>泛型类创立的对象以链表结构存储数据,习惯上称LinkedList类创立的对象为链表对象。例如,LinkedList<String>list=newLinkedList<String>();创立一个空双链表。使用LinkedList<E>泛型类声明创立链表时,必须要指定E的具体类型,然后链表就可以使用add(Eobj)方法向链表依次增加节点12.2.2常用方法以下是LinkedList<E>泛型类实现Lis<E>泛型接口中的一些常用方法。publicbooleanadd(Eelement)publicvoidadd(intindex,Eelement)publicvoidclear()publicEremove(intindex)publicbooleanremove(Eelement)publicEget(intindex)publicintindexOf(Eelement)publicintlastIndexOf(Eelement)publicEset(intindex,Eelement)publicintsize()publicbooleancontains(Objectelement)以下是LinkedList<E>泛型类本身新增加的一些常用方法publicvoidaddFirst(Eelement)publicvoidaddLast(Eelement)publicEgetFirst()publicEgetLast()publicEremoveFirst()publicEremoveLast()publicObjectclone()12.2.3遍历链表当用户需要遍历集合中的对象时,应当使用该集合提供的迭代器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到待遍历的后继对象的引用,因此迭代器可以快速地遍历集合。链表对象可以使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器JDK1.5之前没有泛型的LinkedList类,可以用普通的LinkedList创立一个链表对象,如LinkedListmylist=newLinkedList();然后mylist链表可以使用add(Objectobj)方法向这个链表依次添加节点。由于任何类都是Object类的子类,因此可以把任何一个对象作为链表节点中的对象12.2.4排序与查找如果链表中的数据是实现了Comparable接口的类的实例,比方String对象,那么Java.util包中的Collections类调用sort(List<E>list)方法可以对参数指定的列表进行排序,即按节点中的存储的对象的大小升序排列节点。String类实现了泛型接口Comparable<E>中的compareTo(Eb)方法,使得字符串可以按字典序比较大小,如果一个链表list如下添加节点:list.add("bird");list.add("apple");list.add("cat");那么用sort方法排序list:Collection.sort(list);之后,list中三个节点中的数据将依次是apple,bird和cat。一个类可以实现泛型接口Comparable<E>中的comareTo(Eb)方法来指定该类实例互相比较大小关系的准那么,实现Comparable<E>接口类创立的对象可以调用compareTo(Eb)方法和参数指定的对象比较大小关系。假设a和是实现Comparable<E>接口类创立的两个对象,当apareTo(b)<0称a小于b,apareTo(b)>0时,称a大于b,apareTo(b)==0,时,称a等于b。当链表节点中的对象是实现泛型接口Comparable<E>的类的实例时,就可以使用sort方法对链表进行排序操作。有时需要查找链表中是否含有和指定数据相等的数据,那么首先要对链表排序,然后使用publicstaticintbinarySearch(List<T>list,Tkey)图12.5排序与查找方法查找链表中是否含有和数据key相等的数据12.2.5洗牌与旋转Collections类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法,方法的详细解释如下publicstaticvoidshuffle(List<E>list):随机排列list中的节点。taticvoidrotate(List<E>list,intdistance):旋转链表中的节点,调用该方法后,list索引为i的节点中的数据将是调用该方法前索引为(i-distance)modlist.size()的节点中的数据。例如,假设list节点数据依次为:abcde,那么执行Collections.rotate(list,1)之后,list节点数据依次为eabcd。当方法的参数distance取正值时,向右转动list中的数据,取负值时向左转动list中的数据。图12.6洗牌与旋转publicstaticvoidreverse(List<E>list):翻转list中的数据。假设list节点中的数据依次为:abcde,那么在Collections.reverse(list)之后,list节点中的数据依次为edcba。12.3堆栈堆栈是一种“后进先出〞的数据结构,只能在一端进行输入或输出数据的操作。堆栈把第一个放入该堆栈的数据放在最底下,而把后续放入的数据放在已有数据的顶上。向堆栈中输入数据的操作称为“压栈〞,从堆栈中输出数据的操作称为“弹栈〞。由于堆栈总是在顶端进行数据的输入输出操作,所以弹栈总是输出〔删除〕最后压入堆栈中的数据,这就是“后进先出〞的来历使用java.util包中的Stack<E>泛型类创立一个堆栈对象,堆栈对象可以使用publicEpush(Eitem);实现压栈操作。使用publicEpop();实现弹栈操作。使用publicbooleanempty();判断堆栈是否还有数据,有数据返回false,否那么返回true。使用publicEpeek();获取堆栈顶端的数据,但不删除该数据。使用publicintsearch(Objectdata);获取数据在堆栈中的位置,最顶端的位置是1,向下依次增加,如果堆栈不含此数据,那么返回-1。12.4散列映射12.4.1HashMap<K,V>泛型类HashMap<K,V>泛型类实现了泛型接口Map<K,V>,HashMap<K,V>类中的绝大局部方法都是Map<K,V>接口方法的实现。编程时,可以使用接口回调技术,即把HashMap<K,V>对象的引用赋值给Map<K,V>接口变量,那么接口变量就可以调用类实现的接口方法HashMap<K,V>对象采用散列表这种数据结构存储数据,习惯上称HashMap<K,V>对象为散列映射。散列映射用于存储“键/值〞对,允许把任何数量的“键/值〞对存储在一起。键不可以发生逻辑冲突,即不要两个数据项使用相同的键,如果出现两个数据项对应相同的键,那么,先前散列映射中的“键/值〞对将被替换12.4.2常用方法publicvoidclear()清空散列映射。publicObjectclone()返回当前散列映射的一个克隆。publicbooleancontainsKey(Objectkey)如果散列映射有“键/值〞对使用了参数指定的键,方法返回true,否那么返回false。publicbooleancontainsValue(Objectvalue)如果散列映射有“键/值〞对的值是参数指定的值,方法返回true,否那么返回false。publicVget(Objectkey)返回散列映射中使用key做键的“键/值〞对中的值。publicbooleanisEmpty()如果散列映射不含任何“键/值〞对,方法返回true,否那么返回false。publicVremove(Objectkey)删除散列映射中键为参数指定的“键/值〞对,并返回键对应的值。publicintsize()返回散列映射的大小,即散列映射中“键/值〞对的数目。12.4.3遍历散列映射publicCollection<V>values()方法返回一个实现Collection<V>接口类创立的对象,可以使用接口回调技术,即将该对象的引用赋给Collection<V>接口变量,该接口变量可以回调iterator()方法获取一个Iterator对象,这个Iterator对象存放着散列映射中所有“键/值〞对中的“值〞12.4.3基于散列映射的查询对于经常需要进行查找的数据可以采用散列映射来存储这样的数据,即为数据指定一个查找它的关键字,然后按着“健-值〞对,将关键字和数据一并存入散列映射中12.5树集12.5.1TreeSet<E>泛型类TreeSet<E>类是实现Set<E>接口的类,它的大局部方法都是接口方法的实现。TreeSet<E>类创立的对象称作树集。树集采用树结构存储数据,树节点中的数据会按存放的数据的“大小〞顺序一层一层地依次排列,在同一层中的节点从左到右按字从小大递增排列,下一层的都比上一层的小使用add方法为树集添加节点12.5.2节点的大小关系树集节点的排列和链表不同,不按添加的先后顺序排列。树集用add方法添加节点,节点会按其存放的数据的“大小〞顺序一层一层地依次排列,在同一层中的节点从左到右按“大小〞顺序递增排列,下一层的都比上一层的小String类实现了Comparable<E>泛型接口中的compareTo(Eb)方法,字符串对象调用compareTo(Strings)方法按字典序与参数s指定的字符串比较大小,也就是说两个字符串对象知道怎样比较大小。因此,当树集中节点存放的是String对象时,树集的节点数据的“大小〞顺序一层一层地依次排列,在同一层中的节点从左到右按“大小〞顺序递增排列,下一层的都比上一层的小。实现Comparable<E>泛型接口类创立的对象可以调用compareTo(Eb)方法和参数指定的对象比较大小关系12.5.3TreeSet类的常用方法publicbooleanadd(Eo)向树集添加加节点,节点中的数据由参数指定,添加成功返回true,否那么返回false。publicvoidclear()删除树集中的所有节点。publicvoidcontains(Objecto)如果树集中有包含参数指定的对象,该方法返回true,否那么返回false。publicEfirst()返回树集中的第一个节点中的数据〔最小的节点〕。publicE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教八下英语Unit 8《Project-Reflecting》课件
- 2026年口腔执业医师聘用合同(1篇)
- 2025 高中信息技术数据结构在游戏角色属性的生成与成长的平衡性与多样性优化课件
- 2026年票据保理合同(1篇)
- 硬装施工规范培训【课件文档】
- 物流配送流程培训【课件文档】
- 新增资产价值的确定原则和计算方法
- 医院安全生产课件
- STP战略教学精要
- 社区春季健康知识课件
- DB34-T 5275-2025 全预制装配式公路梁桥设计与施工技术规程
- 2025年上海市黄浦区中考数学二模试卷
- 2025年国际汉语教师证书(CTCSOL)笔试教学理论与实践案例详解与模拟试题及答案
- 2025年全国中学生生物学联赛试题及答案(精校版)
- 2025年及未来5年中国燕窝酸行业市场深度分析及发展前景预测报告
- GB/T 46417-2025商用车对开路面直线制动车辆稳定性试验方法
- 成考专升本英语词汇必背3500词
- 2025年及未来5年中国汽车空调用微通道换热器行业发展监测及投资战略研究报告
- 橡胶隔音垫施工方案设计
- 高校图书馆标准化建设方案
- 《烹饪美学》课件-第五章 饮食器具美学
评论
0/150
提交评论