Java實現(xiàn)排序的方式
- 自然排序:java.lang.Comparable
- 定制排序:java.lang.Comparator
自然排序
應用場景
1榴都、Comparable接口強行對它的每一個子類進行整體排序下面,這種排序被稱為類的自然排序(默認升序排序碟案,從小到大)
2、實現(xiàn)了Comparable接口的對象棉饶,可在任何位置進行排序比較,沒有使用范圍的局限性
具體使用
1、實現(xiàn)Comparable接口的子類赋续,必須重寫compareTo(Object obj)方法
3、兩個對象即通過compareTo(Object obj)方法的返回值來比較大小
4另患、如果當前對象this大于形參對象obj纽乱,剛返回正整數(shù),如果小于返回負整數(shù)昆箕,如果等于返回0
5鸦列、對于實現(xiàn)過接口的子類,通過使用Collections.sort()或Arrays.sort()進行自動排序
代碼舉例
@Test
public void test1(){
String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};
//
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
定制排序
應用場景
1鹏倘、需要排序的對象薯嗤,沒有實現(xiàn)java.lang.Comparable接口又不方便修改代碼時
2、實現(xiàn)了自然排序纤泵,不滿足業(yè)務需求時
3骆姐、實現(xiàn)了Comparable接口的對象,更偏向于臨時性排序輸出
具體使用
1夕吻、實現(xiàn)Comparator接口诲锹,重寫compare(Object obj1,Object obj2)方法,比較o1和o2的大小
2涉馅、對于實現(xiàn)過接口的子類归园,通過使用Collections.sort()或Arrays.sort(),裝載到容器中稚矿,進行定制排序
代碼舉例
@Test
public void test4(){
Goods[] arr = new Goods[6];
arr[0] = new Goods("lenovoMouse",34);
arr[1] = new Goods("dellMouse",43);
arr[2] = new Goods("xiaomiMouse",12);
arr[3] = new Goods("huaweiMouse",65);
arr[4] = new Goods("huaweiMouse",224);
arr[5] = new Goods("microsoftMouse",43);
Arrays.sort(arr, new Comparator() {
//指明商品比較大小的方式:按照產(chǎn)品名稱從低到高排序,再按照價格從高到低排序
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Goods && o2 instanceof Goods){
Goods g1 = (Goods)o1;
Goods g2 = (Goods)o2;
if(g1.getName().equals(g2.getName())){
return -Double.compare(g1.getPrice(),g2.getPrice());
}else{
return g1.getName().compareTo(g2.getName());
}
}
throw new RuntimeException("輸入的數(shù)據(jù)類型不一致");
}
});
System.out.println(Arrays.toString(arr));
}