`
ihuashao
  • 浏览: 4745208 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java中的排序(一)

阅读更多

在编程的过程中,我们必不可少的会遇到排序问题。好在Java中,有些类的方法已经给排序提供了很好的解决办法了;另外实现某些能够实现排序的接口也可以达到排序的目的。当然了,你也可以直接写排序算法。不过在这一篇blog里,还是主要介绍已有的方法和接口。

首先当然是我们很熟悉的Arrays.sort()方法了。废话不多说,看代码:

  1. importjava.util.*;
  2. publicclassTestArraysSort{
  3. finalstaticintARRAY_LENGTH=1000000;
  4. publicstaticvoidmain(Stringargs[]){
  5. int[]intArray=newint[ARRAY_LENGTH];
  6. for(inti=0;i<ARRAY_LENGTH;i++)
  7. intArray[i]=(int)(i+Math.random()*i);
  8. longtimeFirst=System.currentTimeMillis();
  9. Arrays.sort(intArray);
  10. System.out.println("Lasts:"+(System.currentTimeMillis()-timeFirst)/1000+"s");
  11. }
  12. }

运行结果是:

  1. Lasts:0s//真他娘的快啊...

查看Java API文档,其实Arrays.sort()方法的参数很多,包括整形数组,字符型数组,Object型数组(也就是自定义的抽象类型的数组)。但是这个类必须实现java.lang.comparable接口,说明白点就是要实现这个类下面的抽象方法int compareTo(Object o)。以Collections.sort()为例,请看代码:

  1. importjava.util.*;
  2. classMarkimplementsComparable{
  3. privateStringname;
  4. privateStringcourse;
  5. privatedoublemark;
  6. publicMark(Stringname,Stringcourse,doublemark){
  7. this.name=name;
  8. this.course=course;
  9. this.mark=mark;
  10. }
  11. publicintcompareTo(Objecto){
  12. Markm=(Mark)o;
  13. return(int)(this.mark-m.mark);
  14. }
  15. publicStringtoString(){
  16. return"("+name+"-"+course+"-"+String.valueOf(mark)+")";
  17. }
  18. }
  19. publicclassTestCollectionsSort{
  20. publicstaticvoidmain(Stringargs[]){
  21. List<Mark>list=newArrayList<Mark>();
  22. Markmark1=newMark("S1","Maths",68.5);
  23. Markmark2=newMark("S1","Maths",78.5);
  24. Markmark3=newMark("S1","Maths",62.5);
  25. Markmark4=newMark("S1","Maths",98.5);
  26. Markmark5=newMark("S1","Maths",82.5);
  27. list.add(mark1);
  28. list.add(mark2);
  29. list.add(mark3);
  30. list.add(mark4);
  31. list.add(mark5);
  32. System.out.println(list);
  33. Collections.sort(list);
  34. System.out.println(list);
  35. }
  36. }

运行结果:

  1. [(S1-Maths-68.5),(S1-Maths-78.5),(S1-Maths-62.5),(S1-Maths-98.5),(S1-Maths-82.5)]
  2. [(S1-Maths-62.5),(S1-Maths-68.5),(S1-Maths-78.5),(S1-Maths-82.5),(S1-Maths-98.5)]

如果你要按照不同的标准进行排序的话,还可以求助于另一个java.util.Comparator接口。例如File类是实现了Comaparable接口的,但是它是按照文件名进行排序的,下面这段代码实现了按文件大小和修改时间排序的功能。请看代码:

  1. importjava.util.*;
  2. importjava.io.*;
  3. classFileComparator{
  4. staticclassCompratorByLastModifiedimplementsComparator{
  5. publicintcompare(Objecto1,Objecto2){
  6. Filefile1=(File)o1;
  7. Filefile2=(File)o2;
  8. longdiff=file1.lastModified()-file2.lastModified();
  9. if(diff>0)
  10. return1;
  11. elseif(diff==0)
  12. return0;
  13. else
  14. return-1;
  15. }
  16. publicbooleanequals(Objectobj){
  17. returntrue;//因为不会用到这个方法,所以只是简单的返回一个true
  18. }
  19. }
  20. staticclassCompratorBySizeimplementsComparator{
  21. publicintcompare(Objecto1,Objecto2){
  22. Filefile1=(File)o1;
  23. Filefile2=(File)o2;
  24. longdiff=file1.length()-file2.length();
  25. if(diff>0)
  26. return1;
  27. elseif(diff==0)
  28. return0;
  29. else
  30. return-1;
  31. }
  32. publicbooleanequals(Objectobj){
  33. returntrue;//因为不会用到这个方法,所以只是简单的返回一个true
  34. }
  35. }
  36. }
  37. publicclassFileSort{
  38. publicstaticvoidmain(Stringargs[]){
  39. Filefile=newFile("C:\\Folder");
  40. File[]fileArray=file.listFiles();
  41. System.out.println("SortedbyName:");
  42. Arrays.sort(fileArray);
  43. for(inti=0;i<fileArray.length;i++)
  44. System.out.println(fileArray[i]);
  45. System.out.println("SortedbySize:");
  46. Arrays.sort(fileArray,newFileComparator.CompratorBySize());
  47. for(inti=0;i<fileArray.length;i++)
  48. System.out.println(fileArray[i]);
  49. System.out.println("SortedbyLastModifiedTime:");
  50. Arrays.sort(fileArray,newFileComparator.CompratorByLastModified());
  51. for(inti=0;i<fileArray.length;i++)
  52. System.out.println(fileArray[i]);
  53. }
  54. }

运行结果是:

  1. SortedbyName:
  2. C:\Folder\1.txt
  3. C:\Folder\2.txt
  4. C:\Folder\3.txt
  5. SortedbySize:
  6. C:\Folder\1.txt
  7. C:\Folder\3.txt
  8. C:\Folder\2.txt
  9. SortedbyLastModifiedTime:
  10. C:\Folder\1.txt
  11. C:\Folder\3.txt
  12. C:\Folder\2.txt
分享到:
评论

相关推荐

    Acronis Backup:Acronis备份策略设计原理.docx

    Acronis Backup:Acronis备份策略设计原理.docx

    phpEasyVCS-2.0.zip

    phpEasyVCS-2.0.zip

    2023-04-06-项目笔记 - 第三百五十一阶段 - 4.4.2.349全局变量的作用域-349 -2025.12.18

    2023-04-06-项目笔记-第三百五十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.349局变量的作用域_349- 2024-12-18

    【BP回归预测】基于matlab非洲秃鹫算法优化BP神经网络AVOA-BP光伏数据预测(多输入单输出)【Matlab仿真 5152期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于java的狄氏皮草服装店销售管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    用户管理: 能够完成用户基本信息录入的注册和用户基本信息的修改。 管理员管理: 能够完成管理员对网站的商品信息管理(商品添加、商品审查)、会员管理(会员审查)、网站信息管理(新闻添加、修改删除、公告设置),以及常规设置(广告添加,友情链接)的功能。 搜索功能: 能过电子商品的名称进行搜索。 查询功能: 能够通过查看购物车对所选商品进行确定、挑选。 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    BLE蓝牙单片机CC2540、CC2541带OSAL操作系统的项目实战开发例程-蓝牙游戏手柄例程(空中鼠标键盘、体感游戏手柄).zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用IAR软件开发,当前在CC2540/CC2541上运行,如果是其他型号芯片,请自行调整。 3、软件下载时,请注意接上硬件,并确认烧录器连接正常。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、例程具有一定专业性,非专业人士请谨慎操作。

    【BP回归预测】基于matlab哈里斯鹰算法优化BP神经网络HHO-BP光伏数据预测(多输入单输出)【Matlab仿真 5155期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【BP回归预测】基于matlab飞蛾扑火算法优化BP神经网络MFO-BP光伏数据预测(多输入单输出)【Matlab仿真 5151期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    IO总结总结总结总结总结

    IO总结总结总结总结总结

    基于java的人人乐超市采购管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    系统能够对客户信息管理、订单管理、商品信息管理、供应商管理、库存管理,系统用户管理等信息提供存储、更新、查询、统计的功能。 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    基于java的视频教学考试网源代码(完整前后端+mysql+说明文档+LW).zip

    前台模块: 站内新闻:发布与视频教学相关的新闻和动态。 视频学习:提供视频教学内容,供用户学习。 在线留言:用户可以在线提交留言或反馈。 用户注册:允许新用户注册成为网站的会员。 在线论坛:提供一个在线讨论的平台。 资料下载:提供学习资料或其他相关文件的下载服务。 管理员模块: 系统用户管理:管理系统用户的账户信息。 注册用户管理:管理注册用户的资料和信息。 教师信息管理:管理教师的资料和信息。 站内新闻管理:管理网站新闻内容的发布和更新。 课程信息:管理课程的相关信息。 资料下载管理:管理可供下载的资料。 论坛管理:管理在线论坛的内容和用户互动。 注册用户模块: 教师资料修改:教师可以修改自己的个人信息。 作业发布管理:用户可以发布作业或相关任务。 在线资料下载:注册用户可以下载在线资料。 学生资料管理:学生可以管理自己的资料。 学生下载作业:学生可以下载教师发布的作业。 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    汉普美的ERP简介、实施、应用.ppt

    汉普美的ERP简介、实施、应用.ppt

    深圳混泥土搅拌站资金、现金、费用管理规定.docx

    深圳混泥土搅拌站资金、现金、费用管理规定

    worldgroup manager(瀛海威时空客户端英文原版)

    98年的telnetBBS软件,配合worldgroup server使用(16位),是瀛海威时空客户端的英文原版。

    5aaaaaaaaaaaaaaaaaaaaaa

    5aaaaaaaaaaaaaaaaaaaaaa

    基础的Go微服务框架.zip

    这个项目是一个基础的Go微服务框架,适合作为微服务架构的学习项目。希望这个项目能帮助你入门Go语言的微服务开发!

    2024-2030中国核苷酸市场现状研究分析与发展前景预测报告 Sample Yuan.pdf

    此为报告样本,完整报告的框架结构

    传送带中大块煤识别检测数据集,使用coco json格式对792张图片标注

    传送带中大块煤识别检测数据集,使用coco json格式对792张图片标注,标注图片和标注信息可参考博文:https://backend.blog.csdn.net/article/details/144513245

    DLLDirectX文件快速修复工具

    此工具能快速有效的修复系统缺失的DLL和DirectX文件

    计算机组成原理课程设计(模型机).doc

    计算机组成原理课程设计(模型机).doc

Global site tag (gtag.js) - Google Analytics