`
ihuashao
  • 浏览: 4554058 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics