在编程的过程中,我们必不可少的会遇到排序问题。好在Java中,有些类的方法已经给排序提供了很好的解决办法了;另外实现某些能够实现排序的接口也可以达到排序的目的。当然了,你也可以直接写排序算法。不过在这一篇blog里,还是主要介绍已有的方法和接口。
首先当然是我们很熟悉的Arrays.sort()方法了。废话不多说,看代码:
-
importjava.util.*;
-
publicclassTestArraysSort{
-
finalstaticintARRAY_LENGTH=1000000;
-
publicstaticvoidmain(Stringargs[]){
-
int[]intArray=newint[ARRAY_LENGTH];
-
for(inti=0;i<ARRAY_LENGTH;i++)
-
intArray[i]=(int)(i+Math.random()*i);
-
longtimeFirst=System.currentTimeMillis();
- Arrays.sort(intArray);
-
System.out.println("Lasts:"+(System.currentTimeMillis()-timeFirst)/1000+"s");
- }
- }
运行结果是:
查看Java API文档,其实Arrays.sort()方法的参数很多,包括整形数组,字符型数组,Object型数组(也就是自定义的抽象类型的数组)。但是这个类必须实现java.lang.comparable接口,说明白点就是要实现这个类下面的抽象方法int compareTo(Object o)。以Collections.sort()为例,请看代码:
-
importjava.util.*;
-
classMarkimplementsComparable{
-
privateStringname;
-
privateStringcourse;
-
privatedoublemark;
-
publicMark(Stringname,Stringcourse,doublemark){
-
this.name=name;
-
this.course=course;
-
this.mark=mark;
- }
-
publicintcompareTo(Objecto){
- Markm=(Mark)o;
-
return(int)(this.mark-m.mark);
- }
-
publicStringtoString(){
-
return"("+name+"-"+course+"-"+String.valueOf(mark)+")";
- }
- }
-
publicclassTestCollectionsSort{
-
publicstaticvoidmain(Stringargs[]){
-
List<Mark>list=newArrayList<Mark>();
-
Markmark1=newMark("S1","Maths",68.5);
-
Markmark2=newMark("S1","Maths",78.5);
-
Markmark3=newMark("S1","Maths",62.5);
-
Markmark4=newMark("S1","Maths",98.5);
-
Markmark5=newMark("S1","Maths",82.5);
- list.add(mark1);
- list.add(mark2);
- list.add(mark3);
- list.add(mark4);
- list.add(mark5);
- System.out.println(list);
- Collections.sort(list);
- System.out.println(list);
- }
- }
运行结果:
-
[(S1-Maths-68.5),(S1-Maths-78.5),(S1-Maths-62.5),(S1-Maths-98.5),(S1-Maths-82.5)]
-
[(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接口的,但是它是按照文件名进行排序的,下面这段代码实现了按文件大小和修改时间排序的功能。请看代码:
-
importjava.util.*;
-
importjava.io.*;
-
classFileComparator{
-
staticclassCompratorByLastModifiedimplementsComparator{
-
publicintcompare(Objecto1,Objecto2){
- Filefile1=(File)o1;
- Filefile2=(File)o2;
-
longdiff=file1.lastModified()-file2.lastModified();
-
if(diff>0)
-
return1;
-
elseif(diff==0)
-
return0;
-
else
-
return-1;
- }
-
publicbooleanequals(Objectobj){
-
returntrue;
- }
- }
-
staticclassCompratorBySizeimplementsComparator{
-
publicintcompare(Objecto1,Objecto2){
- Filefile1=(File)o1;
- Filefile2=(File)o2;
-
longdiff=file1.length()-file2.length();
-
if(diff>0)
-
return1;
-
elseif(diff==0)
-
return0;
-
else
-
return-1;
- }
-
publicbooleanequals(Objectobj){
-
returntrue;
- }
- }
- }
-
publicclassFileSort{
-
publicstaticvoidmain(Stringargs[]){
-
Filefile=newFile("C:\\Folder");
- File[]fileArray=file.listFiles();
-
System.out.println("SortedbyName:");
- Arrays.sort(fileArray);
-
for(inti=0;i<fileArray.length;i++)
- System.out.println(fileArray[i]);
-
System.out.println("SortedbySize:");
-
Arrays.sort(fileArray,newFileComparator.CompratorBySize());
-
for(inti=0;i<fileArray.length;i++)
- System.out.println(fileArray[i]);
-
System.out.println("SortedbyLastModifiedTime:");
-
Arrays.sort(fileArray,newFileComparator.CompratorByLastModified());
-
for(inti=0;i<fileArray.length;i++)
- System.out.println(fileArray[i]);
- }
- }
运行结果是:
- SortedbyName:
-
C:\Folder\1.txt
-
C:\Folder\2.txt
-
C:\Folder\3.txt
- SortedbySize:
-
C:\Folder\1.txt
-
C:\Folder\3.txt
-
C:\Folder\2.txt
- SortedbyLastModifiedTime:
-
C:\Folder\1.txt
-
C:\Folder\3.txt
-
C:\Folder\2.txt
分享到:
相关推荐
java实现中文排序,按数字字母汉字的顺序进行排序
java 中文姓氏 排序
Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序
java中集合排序
JAVA排序汇总JAVA排序汇总JAVA排序汇总
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
java 选择排序法 java 选择排序法 java 选择排序法
java冒泡排序代码,亲测能用,控制台输入数据,自动排序
java类,该类可以对一组数值进行由小到大排序。主类的main方法中,从键盘上输入一组数值,使用该类对其排序。
一个简单的demo,关于中英文排序,一个java Demo
java数组排序的思想,过程和代码实现。多种数组排序的方法,主要有冒泡排序,堆排序,插入排序, 归并操作(merge), 归并操作(merge),选择排序,希尔排序。
java 冒泡排序方法,java 冒泡排序方法。
Java三种排序 Java三种排序 Java三种排序
java 各种排序排序.pdf
Java各种排序算法集合: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(箱排序、基数排序)
java排序.txt
Java 中的一些重要排序,比如冒泡,直接插入排序
java排序 java 排序 排序大全 算法 java算法
4. * 汉字按照拼音排序的比较器 5. * @author KennyLee 2009-2-23 10:08:59 6. * 7. */ 8.public class PinyinComparator implements Comparator<Object> { 9. public int compare(Object o1, Object o2) { 10...