Arrays.sort()

今天在做一个按更新时间搜寻出某个目录里面的全部文件,因为自己写算法比較花费时间,干脆就用j2se提供的类Arrays提供的sort()方法,这样就比較省力。对于基本数据类型仅仅要Arrays.sort(数组)[“注:数组是声明为基本数据类型的数组,如int[]等”]

对于对象类型,要 implement Comparable,所以得重载 compareTo() 这个方法。有了这个方法,那么 Arrays.sort() 就能按照这种方法的回传值来作排序的根据。其实,基本数据类型也都有 implement Comparable 的,所以才可以这样子使用。一般而言,我们习惯的排序结果是由小到大,所以在 compareTo() 其中「大于」是回传正值,假设你希望得到的结果是由大到小,那么仅仅要 return 的部分改一下,也就行了。只是不建议这样子作,会减少程序可读性;况且,仅仅要把数组逆向 traversal 不就得到一样的结果啦...

import java.util.Arrays;
import java.util.Comparator;

public class ArraySortDemo {

/**
* 整数型数组排序
*/

public void sortIntArray() {
   int[] arrayToSort = new int[] { 48, 5, 89, 80, 81, 23, 45, 16, 2 };
   System.out.println("整数型数组排序,排序前:");
   for (int i = 0; i < arrayToSort.length; i++){
    System.out.print(arrayToSort[i]+",");
   }

// 调用数组的静态排序方法sort
  Arrays.sort(arrayToSort);

System.out.println();
   System.out.println("排序后:");
   for (int i = 0; i < arrayToSort.length; i++){
    System.out.print(arrayToSort[i]+",");
   }

}

/**
* 字符型数组排序demo
*/

public void sortStringArray() {
   String[] arrayToSort = new String[] { "Oscar", "Charlie", "Ryan","Adam", "David","aff","Aff" };
   System.out.println();
   System.out.println("字符型数组排序,排序前:");
   for (int i = 0; i < arrayToSort.length; i++){
    System.out.print(arrayToSort[i]+",");
   }

System.out.println();
   System.out.println("排序后:");

// 调用数组的静态排序方法sort
   Arrays.sort(arrayToSort);

for (int i = 0; i < arrayToSort.length; i++){
    System.out.print(arrayToSort[i]+",");
   }

}

/**
* 对象数组排序demo
*/

public void sortObjectArray() {
   Dog o1 = new Dog("dog1", 1);
   Dog o2 = new Dog("dog2", 4);
   Dog o3 = new Dog("dog3", 5);
   Dog o4 = new Dog("dog4", 2);
   Dog o5 = new Dog("dog5", 3);
   Dog[] dogs = new Dog[] { o1, o2, o3, o4, o5 };

System.out.println();
   System.out.println("对象数组排序排序前:");

for (int i = 0; i < dogs.length; i++) {
    Dog dog = dogs[i];
    System.out.print(dog.getName()+"["+dog.getWeight()+"],");
   }

Arrays.sort(dogs, new ByWeightComparator());

System.out.println();
   System.out.println("排序后:");

for (int i = 0; i < dogs.length; i++) {
    Dog dog = dogs[i];
    System.out.print(dog.getName()+"["+dog.getWeight()+"],");
   }

}

public static void main(String[] args) {
   ArraySortDemo t = new ArraySortDemo();
   t.sortIntArray();
   t.sortStringArray();
   t.sortObjectArray();
 }

}

/**
* 定义了一个Dog类
*/

class Dog {
private String name;
private int weight;

public Dog(String name, int weight) {
   this.setName(name);
   this.weight = weight;
}

public int getWeight() {
   return weight;
}

public void setWeight(int weight) {
   this.weight = weight;
}

public void setName(String name) {
   this.name = name;
}

public String getName() {
   return name;
}
}

/**
* 由于要对对象进行排序,所以要实现java.util.Comparator接口的compare(T o1, T o2)方法,在该方法中自己定义排序算法。
*/

class ByWeightComparator implements Comparator {
public final int compare(Object pFirst, Object pSecond) {
   int aFirstWeight = ((Dog) pFirst).getWeight();
   int aSecondWeight = ((Dog) pSecond).getWeight();
   int diff = aFirstWeight - aSecondWeight;
   if (diff > 0)
    return 1;
   if (diff < 0)
    return -1;
   else
    return 0;
}
}

执行结果:

整数型数组排序,排序前:
48,5,89,80,81,23,45,16,2
排序后:
2,5,16,23,45,48,80,81,89
字符型数组排序,排序前:
Oscar,Charlie,Ryan,Adam,David,aff,Aff
排序后:
Adam,Aff,Charlie,David,Oscar,Ryan,aff
对象数组排序排序前:
dog1[1],dog2[4],dog3[5],dog4[2],dog5[3]
排序后:
dog1[1],dog4[2],dog5[3],dog2[4],dog3[5]

时间: 2024-10-13 23:42:30

Arrays.sort()的相关文章

JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序

一.描述 自定义的类要按照一定的方式进行排序,比如一个Person类要按照年龄进行从小到大排序,比如一个Student类要按照成绩进行由高到低排序. 这里我们采用两种方式,一种是使用Comparable接口:让待排序对象所在的类实现Comparable接口,并重写Comparable接口中的compareTo()方法,缺点是只能按照一种规则排序. 另一种方式是使用Comparator接口:编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法,

(转)Arrays.sort()你应该知道的事

Arrays.sort(T[], Comparator < ? super T > c) 是用来对用户自定义的对象数组排序功能的.Java 官方文档简单描述了它的作用,但不足以让我们深刻理解.为了更深入地理解它,这篇文章将梳理相关的关键点. 1.简单实例:如何使用Arrays.sort() 通过阅读下面代码,你能快速正确了解这个方法的用途.Comparator(比较器)用于根据Dogs的size比较其大小,并作为sort方法的参数. 1 2 3 4 5 6 7 8 9 10 11 12 13

关于使用Java中Arrays.sort()方法TLE

最近一直在练用Java写题(链接),今天无意发现一道很简单的二分题,我一开始是直接开int[]数组调用Arrays.sort()去排序,没想到TLE了,原来是因为jdk中对于int[]的排序是使用快速排序的,jdk中相关调用源码如下 1 public static void sort(int[] a) { 2 DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0); 3 } 而测试数据恰好有反快排的数据,因此被卡. 解决方法也不少,比较简单

JAVA数组与排序(Arrays.sort(数组名))

import java.util.Scanner; import java.util.Arrays; public class ArrayTest03 { public static void main(String[] args) { System.out.println("请输入数组的长度:"); InPut in = new InPut();                                      //调用类InPut int n =in.in_put();  

java中一句话实现排序Arrays.sort(数组名);

import java.util.*; public class Main { public static void main(String[] args){ Scanner in =new Scanner(System.in); int n; n=in.nextInt(); int s[]=new int[n]; for(int i=0;i<n;i++){ s[i]=in.nextInt(); } Arrays.sort(s); for(int i=0; i<n; i++) System.o

SDUT 1591-交叉排序(Arrays.sort)

交叉排序 Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^ 题目描述 输入N个数,把所有奇数位置上的数从小到大排序,把偶数位置上的数从大到小排序. 输入 输入的第一行是一个正整数N(2<=N<=100). 第二行是N个用空格隔开的整数. 输出 输出只有一行N个数,是按要求排序后的序列,用空格隔开. 示例输入 6 1 2 3 4 5 6 示例输出 1 6 3 4 5 2 java的Arrays类居然只有升序排序..sad import j

java.util.Arrays.sort两种方式的排序(及文件读写练习)

import java.io.*; import java.util.*; public class SortTest{ public static void main(String args[]) throws IOException, ClassNotFoundException { FileReader InWord = new FileReader(new File("words.txt")); BufferedReader in = new BufferedReader(In

java源码分析:Arrays.sort

1 2 3 仔细分析java的Arrays.sort(version 1.71, 04/21/06)后发现,java对primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序. 4 对这一区别,sun在<<The Java Tutorial>>中做出的解释是: 5 The sort operation uses a slightly optimized merge sort algorithm that is fast and stab

数组排序 ---- Arrays.sort()方法

Arrays.sort() 能够对对数组进行排序. 默认从小到大排序,如需调整顺序,需要通过实现Comparator接口并调用 Arrays.sort()可以对int[].double[].char[].long[].byte[].short[]之类的数据类型进行排序,下面以最常见的int[]数组为例说明. Arrays.sort(int[] values) 这种方式能够对int[] .double[].long[]之类的基本类型的数组元素进行排序,默认从小到大排序 Arrays.sort(in