从不依靠,从不寻找。非常沉默,非常骄傲。
欢迎大家批评指正!
一:Arrays里面的sort函数
1):基本数据类型升序排列:
- Arrays.sort(Object[]);
- Arrays.sort(Object[],l,r);给数组[l,r)区间的变量排序
2):基本数据类型降序排列:
- 不好意思,查了api发现没有这个操作。你可以将升序排列后的数组再逆置,或者是你可以自定义排序函数。
- 那么自定义怎样最快呢?建议看 3)自己定义的类 里面的第三段代码
3)自己定义的类
- 让该类继承Comparable接口,重载compareTo函数。(第一段代码)(
parallelSort和sort都可以,有兴趣自己查一下
) - 让该类继承Comparator接口,重载Compare函数。
- 第二第三段代码是利用Comparator接口的两种方法。
- 讲一下Comparable接口和Comparator的区别:前者是内部排序,后者是外部排序。啥意思?一个类只要是继承了Comparable接口,那么这个类的对象都是可以有大小的。但是如果如果使用Comparator,表示的是外部排序,这个时候排序只是借用了外部的工具,自定义的这个类创建的对象之间并没有大小关系,只是能通过外部的方法进行排序而已。
//一:继承Comparable接口,重载compareTo函数
public class Test {
public static void main(String[] argvs) {
A a[]=new A[10];
//初始化
for(int i=0;i<10;i++) {
a[i]=new A(i);
}
System.out.println("排序前的输出:");
for(A tp:a) {
System.out.print(tp.n+" ");
}
System.out.println();
System.out.println("排序后的输出:");
Arrays.sort(a,0,10);
for(A tp:a) {
System.out.print(tp.n+" ");
}
}
}
//继承Comparable
class A implements Comparable<A>{
public int n;
public A(int n){
this.n=n;
}
@Override
public int compareTo(A o) {
if(this.n<o.n) return 1;
else if(this.n>o.n) return -1;
else return 0;
}
}
二:重写Comparator里面的Compare函数,利用匿名类
public class Test {
public static void main(String[] argvs) {
A a[]=new A[10];
//初始化
for(int i=0;i<10;i++) {
a[i]=new A(i);
}
System.out.println("排序前的输出:");//0 1 2 3 4 5 6 7 8 9
for(A tp:a) {
System.out.print(tp.n+" ");
}
System.out.println();
System.out.println("排序后的输出:");//9 8 7 6 5 4 3 2 1 0
Arrays.sort(a,0,10,new Comparator<A>(){
public int compare(A x, A y) {
if(x.n>y.n) return -1;
else if(x.n<y.n) return 1;
else return 0;
}
});
for(A tp:a) {
System.out.print(tp.n+" ");
}
}
}
//继承Comparable
class A{
public int n;
public A(int n){
this.n=n;
}
}
三:通过一个类重载comparator接口来实现排序
package Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Test {
public static void main(String[] argvs) {
A a[]=new A[10];
//初始化
for(int i=0;i<10;i++) {
a[i]=new A(i);
}
System.out.println("排序前的输出:");
for(A tp:a) {
System.out.print(tp.n+" ");
}
//排序前0 1 2 3 4 5 6 7 8 9
System.out.println();
System.out.println("排序后的输出:");
Arrays.sort(a,new mycom());
//输出 9 8 7 6 5 4 3 2 1 0
for(A tp:a) {
System.out.print(tp.n+" ");
}
}
}
class mycom implements Comparator<A>{
@Override
public int compare(A o1, A o2) {
if(o1.n<o2.n) return 1;
else if(o1.n>o2.n) return -1;
else return 0;
}
}
//继承Comparable
class A{
public int n;
public A(int n){
this.n=n;
}
}
二:Collectiongs里面的sort函数
Collections.sort是对一个list进行排序,Arrays.sort是对一个普通数组进行排序。
Arrays.sort()在里面元素不超过286的时候用的是快排!超过了之后,先判断数组是不是基本有序,如果不是还用快排(因为数组基本有序的情况下,用快排快退化到O(n^2)),否则用归并排序。Collectiongs.sort()其实就是对Arrays.sort()的调用!