数据结构与算法(Java语言版)课件 第12章 常用算法与Collections类_第1页
数据结构与算法(Java语言版)课件 第12章 常用算法与Collections类_第2页
数据结构与算法(Java语言版)课件 第12章 常用算法与Collections类_第3页
数据结构与算法(Java语言版)课件 第12章 常用算法与Collections类_第4页
数据结构与算法(Java语言版)课件 第12章 常用算法与Collections类_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

第12章常用算法与Collections类2024/11/912024/11/922024/11/93Collections类是Object类的一个直接子类(注意Collections比Collection多了一个字母s),该类封装了一系列算法,例如,二分查找,排序、洗牌等算法,这些算法可用于List,Queue、Set。需要注意的是Collections是类,Collection是接口,Collections类没有实现Collection接口.12.1排序2024/11/94

2024/11/9512.1排序例子1Score.java例子1中的主类Example12_1使用Collections类的sort()方法排序(升序)一个链表,首先按链表中的对象实现的Comparable接口给出的比较器排序链表,然后再指定新的比较器排序链表。Example12_1.java12.2二分查找2024/11/96publicstaticintbinarySearch(List<?extendsT>list,Tkey)查找对象key是否在升序的list中(list中的对象按自然序排序),如果key在list中,方法返回key在list中的索引位置(索引位置从0开始),否则返回一个负数。publicstaticintbinarySearch(List<?extendsT>list,Tkey,Comparator<?superT>c)查找对象key是否在升序的list中(list的元素按比较器c排序),如果key在list中,方法返回key在list中的索引位置(索引位置从0开始),否则返回一个负数。注意,排序使用的比较器的算法需要和该方法使用的比较器c的算法相同。2024/11/9712.2二分查找例子2FindWords.java例子2中的FindWords类的booleanfindWords(Stringstr,Stringkey)方法使用二分法判断单词key是否在str中。Example12_2.java12.3反转与旋转2024/11/98publicstaticvoidreverse(List<?>list)反转list中元素的顺序.publicstaticvoidrotate(List<?>list,intdistance)把list向右(distance是正整数)或向左(distance是负整数)旋转distance个索引位置。例如,list节点中的对象依次是[a,b,c,d,e],如果执行Colections.rotate(list,1),那么list节点中的对象依次是[e,a,b,c,d],如果执行Colections.rotate(list,-2),那么list节点中的对象依次是[cdeab]。2024/11/9912.3反转与旋转例子3LeaveOne.javaWordReverse.java例子3中的LeaveOne类的leaveByRotate(LinkedList<Integer>list)方法通过旋转链表,解决约瑟夫问题:把list向左旋转2个索引位置,即可确定出退出圈中的人,理由是,此刻链表头节点就是数到的第3个人,即要出圈的人。例子3的WordRevers类的isReverse(Stringword)方法判断word是否是回文单词(回文单词和它的反转相同)。建议读者把这里的例子3和第4章的例子9做一个比较,体会使用旋转list解决约瑟夫问题,能让代码更加简练。Example12_3.java12.4洗牌2024/11/910我们曾在第4章的4.10节,讲解过洗牌算法,即Fisher-Yates洗牌算法。Collections类将Fisher-Yates洗牌算法封装在下列方法中:publicstaticvoidshuffle(List<?>list)使用Fisher-Yates洗牌算法排列list。2024/11/91112.4洗牌例子4例子4的主类Example12_4使用Collectiones类提供的Fisher-Yates洗牌算法演示洗牌过程。Example12_4.java12.5最大与最小2024/11/912publicstaticTmax(Collection<?extendsT>coll)按coll元素的自然序(元素实现Comparable接口中的比较器给出的大小顺序),返回coll中的最大值。publicstaticTmin(Collection<?extendsT>coll)按coll元素的自然序,返回coll中的最小值。publicstaticTmax(Collection<?extendsT>coll,Comparator<?superT>comp)

按comp比较器,返回coll中的最大值。publicstaticTmin(Collection<?extendsT>coll,,Comparator<?superT>comp)按comp比较器,返回coll中的最小值。2024/11/91312.5最大与最小例子5Example12_5.java例子5中的主类Example12_5求集合中的最大值和最小值。12.6频率2024/11/914publicstaticintfrequency(Collection<?>c,Objectobj)返回c中与指定对象obj相等的元素的数量。我们曾在第10章的例子5中,使用散列表统计文本文件中单词出现的次数和频率。下面的例子6使用intfrequency(Collection<?>c,Objectobj)方法统计文本文件中单词或汉字出现的次数和频率。2024/11/91512.5最大与最小例子6Example12_6.java例子6中的FrequencyEnglish类将英文组成的文本文件中的单词存放在一个集合中,便于统计出不相同的单词的总数,把单词存放在一个链表中,便于统计每个单词出现的次数,

温馨提示

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

评论

0/150

提交评论