比较规则:
正数:交换两者的位置
0 or 或负数:位置不变,
例,
compara(3,1) 返回2,交换两者位置,即升序。
compara(1,3) 返回-2,位置不变,即降序。
两个工具类的排序方法
Collections.sort():对集合进行排序。
Collections.sort的重载方法
Arrays.sort():对数组进行排序,当比较元素为基本类型时,只能进行升序 ,比较引用类型时可降序。
Arrays.sort()的重载方法
Arrays.sort()排序原理
两个接口
Comparable:一般用于自定义的类如:T,类继承该接口后重写comparaTo(T stu)方法。
Comparato:比较器,一般用于瞬时排序,被类所继承并重写compara(T o1,T o2)方法。
注:java为包装类(String,Integer,Double,Float等)定义了compara()方法,可以直接拿来用
两个方法
两个方法都可以用来定义比较规则,通过返回int值确定元素是否交换。(正数交换,非正数不交换)
int comparaTo( T b ):
class myObject implements Comparable<myObject>
{
private int balance;
myObject(int a){
//功能是返回平方数
balance=a*a;
}
int getBalance(){
return balance;
}
@Override
public int compareTo(myObject o) {
// TODO Auto-generated method stub
return Integer.compare(this.getBalance(),o.getBalance());
//ascending
}
}
int compara(o1,o2):
class lengComp implements Comparator<String>
{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.length()-o2.length();
//ascending
}
}
lambda表达式
Arrays.sort(arr,
new MyObject implement Coparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2-o1;
//return Integer.compara(o2,o1)
//ascending
}
})
//转成lambda表达式
Arrays.sort(arr,(o1,o2)->o2-o1);