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

相关推荐

    java中文排序,数字字母汉字排序

    在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字、字母和汉字的顺序进行排列。以下是对这一主题的详细解释。 首先,...

    java 中文姓氏 排序

    本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **Collator 类**:这是 Java 中用于文本排序和检索的标准类。`Collator` 类提供了与语言环境相关的字符串排序...

    Java 实现ip 地址排序

    Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序

    关于中文英文混合排序javaDemo

    在Java编程语言中,处理中文和英文混合的排序问题是一个常见的需求,特别是在处理用户输入、数据库数据或文件名等场景。这个"关于中文英文混合排序javaDemo"的示例主要展示了如何实现这样的功能。让我们深入探讨一下...

    Java 中文排序 使用pinyin4j组件

    在Java编程语言中,对中文字符串进行排序是一个相对复杂的问题,因为中文字符的排序不能简单地按照Unicode编码顺序来处理。通常,我们需要考虑汉字的拼音或者笔画等属性来进行排序。这里我们将详细介绍如何使用`...

    java数组排序

    在Java编程语言中,数组排序是一项基础且重要的任务。它涉及到不同的算法,这些算法通过比较和交换元素来达到数组元素的有序状态。本篇将详细探讨几种常见的排序算法及其在Java中的实现。 首先,让我们从最简单的...

    Java各种排序算法(含代码)

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,了解和掌握各种排序算法对于提升程序性能至关重要。以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)*...

    Java 选择排序 算法

    Java选择排序算法是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。这种算法对列表中的数据进行了一次完整...

    java List 排序 Collections.sort

    总结起来,`Collections.sort()`是Java中对List进行排序的标准工具,它支持自然排序和自定义排序。了解其工作原理和优化技巧,可以帮助我们在编程实践中更高效地处理数据。通过阅读和理解`Collections.sort()`的源码...

    java基础冒泡排序.ppt

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...

    java中list排序

    Java 中 List 排序 Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高...

    java数组自定义排序

    java中数组的自定义排序,种类繁多,简单实现,可自由操控。

    java 集合分组与排序

    下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这在Java 8引入的流(Stream)API中得到了很好的支持。`Collectors.groupingBy`方法允许我们将...

    java 选择排序法

    在Java中实现选择排序,我们通常会用到数组这一数据结构。 首先,我们要理解Java中的数组。数组是一种线性数据结构,它将相同类型的元素存储在连续的内存位置中,通过索引来访问这些元素。在Java中,声明数组时需要...

    JAVA排序汇总 各种排序

    在Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将全面解析Java中的各种排序算法,帮助你理解并掌握它们的核心概念、实现方式以及适用场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序...

    JAVA 8种排序介绍及实现

    本文将介绍两种常见的排序算法:直接插入排序和希尔排序,并通过Java代码实现来帮助理解。 1. 直接插入排序(直接插入排序) 直接插入排序是一种简单的排序方法,它的工作原理类似于我们平时手动整理扑克牌。在排序...

    Java各种排序算法代码.zip

    Java实现中,可以使用一个临时变量存储当前元素,然后向左移动已排序元素,直到找到合适的位置插入。 3. 选择排序(Selection Sort): 选择排序每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列...

    java 冒泡排序 数组冒泡排序

    下面是一个简单的Java代码示例,用于对一个整型数组进行升序排序: ```java public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i ; i++) { for (int...

Global site tag (gtag.js) - Google Analytics