Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。
1.对基本数据类型的数组的排序
说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;
(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。
(3)要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组,如Integer[],Double[],Character[]等,对这些类数组进行排序。(其实还不如先进行升序排序,自己在转为将序)。
用默认的升序对数组排序
函数原型:static void sort(int[] a)
对指定的 int 型数组按数字升序进行排序。
static void sort(int[] a, int fromIndex, int toIndex)
对指定 int 型数组的指定范围按数字升序进行排序。
代码实例:
package _10Arrays类提供的两个排序方法;
import java.util.Arrays;
public class _01基本数据类型数组的sort方法 {
public static void main(String[] args) {
// int[] a = { 1, 4, -1, 5, 0 };
char[] a = {'b', 'd', 'c', 'e', 'a'};
Arrays.sort(a);
// 数组a[]的内容变为{-1,0,1,4,5}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
2.对复合数据类型的数据的排序
函数原型: (1)public static
(2)public static
说明:这个两个排序算法是“经过调优的归并排序”算法。
package _10Arrays类提供的两个排序方法;
import java.util.Arrays;
import java.util.Comparator;
class Node{
private int key;
private int value;
public Node(int key, int value){
this.key = key;
this.value = value;
}
public int getKey() {
return key;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return this.key + "-" + this.value;
}
}
class NodeComparator implements Comparator{
@Override
public int compare(Node o1, Node o2) {
// return o1.getKey()-o2.getKey()>0?1:o1.getKey()-o2.getKey()<0?-1:0;
return o1.getValue()-o2.getValue()>0?1:o1.getValue()-o2.getValue()<0?-1:0;
}
}
public class _02对实现Comparator接口的对象排序 {
public static void main(String[] args) {
Node[] array = new Node[4];
for (int i = 0; i < array.length; i++) {
// array[i] = new Node(array.length-i, i);
array[i] = new Node(i+1, array.length-i);
}
System.out.println("before sort");
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
Arrays.sort(array, new NodeComparator());
System.out.println("after sort");
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}