在编程的过程中,我们必不可少的会遇到排序问题。好在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 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **Collator 类**:这是 Java 中用于文本排序和检索的标准类。`Collator` 类提供了与语言环境相关的字符串排序...
Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序
在Java编程语言中,处理中文和英文混合的排序问题是一个常见的需求,特别是在处理用户输入、数据库数据或文件名等场景。这个"关于中文英文混合排序javaDemo"的示例主要展示了如何实现这样的功能。让我们深入探讨一下...
在Java编程语言中,对中文字符串进行排序是一个相对复杂的问题,因为中文字符的排序不能简单地按照Unicode编码顺序来处理。通常,我们需要考虑汉字的拼音或者笔画等属性来进行排序。这里我们将详细介绍如何使用`...
在Java编程语言中,数组排序是一项基础且重要的任务。它涉及到不同的算法,这些算法通过比较和交换元素来达到数组元素的有序状态。本篇将详细探讨几种常见的排序算法及其在Java中的实现。 首先,让我们从最简单的...
在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,了解和掌握各种排序算法对于提升程序性能至关重要。以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)*...
Java选择排序算法是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。这种算法对列表中的数据进行了一次完整...
总结起来,`Collections.sort()`是Java中对List进行排序的标准工具,它支持自然排序和自定义排序。了解其工作原理和优化技巧,可以帮助我们在编程实践中更高效地处理数据。通过阅读和理解`Collections.sort()`的源码...
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...
Java 中 List 排序 Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高...
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这在Java 8引入的流(Stream)API中得到了很好的支持。`Collectors.groupingBy`方法允许我们将...
在Java中实现选择排序,我们通常会用到数组这一数据结构。 首先,我们要理解Java中的数组。数组是一种线性数据结构,它将相同类型的元素存储在连续的内存位置中,通过索引来访问这些元素。在Java中,声明数组时需要...
在Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将全面解析Java中的各种排序算法,帮助你理解并掌握它们的核心概念、实现方式以及适用场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序...
本文将介绍两种常见的排序算法:直接插入排序和希尔排序,并通过Java代码实现来帮助理解。 1. 直接插入排序(直接插入排序) 直接插入排序是一种简单的排序方法,它的工作原理类似于我们平时手动整理扑克牌。在排序...
Java实现中,可以使用一个临时变量存储当前元素,然后向左移动已排序元素,直到找到合适的位置插入。 3. 选择排序(Selection Sort): 选择排序每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列...
下面是一个简单的Java代码示例,用于对一个整型数组进行升序排序: ```java public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i ; i++) { for (int...