Comparable與Comparator的升序與降序
Comparable介面
public interface Comparable<T> {
int compareTo(T other);
}
當呼叫x.compareTo(y)時,根據返回的整數值來確定x與y的位置,當返回值為正整數時,x在y後面。可以這樣理解——x與y比較,正數大於0,說明x比y大,所以x要排在y後面。同理,當返回值為負數時,x在y前面。當返回值為0,x和y相等。
當我們實現Comparable介面,重寫compareTo方法時,會遇到這種情況
public class Person implements Comparable { private int age; private String name; public Person(int age, String name){ super(); this.age = age; this.name = name; } public int compareTo(Person p){ this.age - p.getAge(); } //省略了getter和setter }
public class PersonTest { public static void main(String[] args) { List<Person> persons = getPersons(); System.out.println("unsorted List"); for(Person p : persons){ System.out.println(p.getAge()); } System.out.println("sorted List"); Collections.sort(persons); for(Person p : persons){ System.out.println(p.getAge()); } } private static List<Person> getPersons() { List<Person> persons = new LinkedList<Person>(); Person p1 = new Person(23, "Bob"); Person p2 = new Person(27, "Tom"); Person p3 = new Person(25, "Jerry"); Person p4 = new Person(21, "Christine"); persons.add(p1); persons.add(p2); persons.add(p3); persons.add(p4); return persons; } }
執行上面的方法會發現,排序會為升序
從程式碼來看,沒看到返回值的正負,怎麼就為升序了。那是因為預設this.age小於p.getAge()。當我們執行this.age-p.getAge(),返回值為負整數,所以this再p前面,所以為升序。反之,如果用p.getAge()-this.age,那麼結果就為降序了。
Comparator介面
排序的時候會遇到這種情況——當對已經設計好的類(比如Person)進行排序,根據對修改關閉,對擴充套件開發的原則,我們不能修改Person類,此時只需要實現Comparator介面,重寫compare(T arg1, T arg2)方法。
同理arg1是預設小於arg2的,如果用arg1 - arg2,結果為升序。或者用arg1.compareTo(arg2),結果也為升序。
注意:T不能是基本型別,兩者相減,只是說用他們能相減的屬性相減或者是基本數值型別的包裝類相減,而不是兩個物件相減
相關推薦
資料庫sqlite查詢語句與升序或降序
注意降序dec或升序 裡面如果不是迴圈while的話,取得都是一個數據。 如果是降序,只取一個(沒有迴圈)取的是一個 最大的數; 如果是升序,只取一個(沒有迴圈)取的是一個 最小的數 SQLite Where 子句SQLite的 WHERE 子句用於指定從一個
比較器comparator,compare函式升序、降序原始碼分析
0、前言 一直想不明白,compare函式如何通過返回值,就確定是升序還是降序呢,於是乎決定好好的先看看原始碼。 下面的程式碼實現了對自己寫的Students類按照年齡升序的排序,就是通過對實現comparator介面,重寫compare的方法,實現
iOS 陣列排序(升序&降序&亂序)
1、陣列排序---升序 #pragma mark --- 陣列排序--升序 -(void)sortArrASCE{ NSArray *array = @[@(2),@(15),@(1),@(22)]; //sort方法排序 NSArray *result = [arr
Java的陣列和list升序,降序,逆序函式Collections.sort和Arrays.sort的使用
list升序,降序,逆序List<Integer>list =new ArrayList<Integer>();//如果list是 5 7 2 6 8 1 41、升序:Collections.sort(list) //list: 1 2 4 5 6 7 82、降序:Collection
iOS---iOS之陣列的排序(升序、降序及亂序)
NSMutableArray *priceArray = [NSMutableArray arrayWithObjects:@"0.2",@"5",@"44",@"67",@"98.5",@"1.55", nil]; [priceArray sortUsingComparato
Java中Arrays.sort()自定義陣列的升序和降序排序
Java學習中會遇到對陣列進行升序或者降序排序的問題 Java語言提供給我們Array.sort(int [] arr)對陣列進行升序排列 import java.util.Arrays; public class Test1 { public stat
mysql 中的升序和降序
MySQL 中 排序怎麼都記不住,這裡我把它的全拼找到 了 desc是descend 降序意思 asc 是ascend 升序意思 sql = "select 表內容名
企業經常出的基本面試題 簡單的氣泡排序 升序和降序
氣泡排序 } document.write(nums(mynum)); // 從小到大 function num(arr){ for(var i =0; i< arr.length;i++){ for(var j = 0;j < arr.length;j++){ if(a
MYSQL order by 根據不同條件升序或降序
現在有一個表,欄位age和type,type = 1的時候需要age降序排列,type = 2的時候age升序排列。一開始覺得很簡單啊,於是就寫: SELECT * FROM table_a ORDER BY CASE WHEN type = 1 THEN
java 之list集合按照欄位升序或降序
實體類我就不寫了,直接上資料吧! List<PersionInfo> list=new ArrayList<>(); PersionInfo info1=new Per
連結串列的帶引數排序,可以通過姓名、成績進行升序或降序操作
先上效果圖: void main() { stu * pHeader = creatLink(4); //建立連結串列,需要手動輸入姓名成績 sort(pHeader, true, COMPARE_SCORE); //按
根據訂單ID進行升序或降序排列
問題描述:訂單明細表中有訂單ID,客戶ID,運貨商,運貨費等欄位(如下表),想實現根據點選訂單ID的次數對訂單ID進行排序,比如說,點選一次訂單ID的欄位名,則根據訂單ID進行升序排列,再點選一次則降序排列,以此類推。 訂單ID 客戶ID 僱員ID 訂購
list集合中的物件按時間升序或降序
實體類package com.suixingpay.sms.dubbo.provider; import java.util.Date; public class TestObject { private Date installDate; private
List根據實體類的某個屬性升序或者降序來排列
介紹 最近做的一個前臺的頁面的獲曲資料庫某個表的列表的功能,要求按照表的某個屬性來升序最好不要動mybatis,所以通過mybatis獲取的list,通過方法的 Collections.sort(list, new Comparator() {…});進行排序 升序 / 降序 i
利用Arrays.sort();方法對相應陣列進行升序、降序排列
一.方法 Ⅰ.Arrays.sort();方法是Array類中的工具方法,使陣列中的元素進行升序排列。匯入載入java.util.Arrays;後可以直接使用。 二.升序例項 Ⅰ.舉例說明 對任意人數的學生成績進行升序排列。 Ⅱ.程式碼 ①先利用
mysql 中的升序和降序 .
mySQL裡desc和asc的意思 desc是descend 降序意思 asc 是ascend 升序意思 sql = "select 表內容名 from 資料庫表名 Putout=true order by 讀取的排序表名 asc" 例如
氣泡排序(升序和降序)的python程式碼實現
氣泡排序 交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。 應用交換排序基本思想的主要排序方法有:氣泡排序和快速排序。 氣泡排序的程式設計
Map按值的升序或降序排序最簡單的方法
使用jdk8的新特性private List<Map.Entry<String, Integer>> sortMap(Map<String, Integer> map, boolean asc) { Stream<Map.E
java SortedMap 升序、降序操作
參考: ########################################################## 降序操作:按key降序 import java.util.Comparator; import java.util.Iterator; i
SQL 升序、降序排列
/*查詢學生表中姓名、學號,並以學號降序排序*/ select name,StuID from Students_information order by StuID desc /**order b