今天寫**遇到乙個問題,對兩個兩個不同型別的集合進行排序,上網找了一下方法,然後試驗了一下,用隨筆記錄一下整個過程:
對集合進行排序,自然而然就想到了集合的排序方法sort(),於是開啟反編譯器找到這個方法(以list為例),如下圖:
可以看到呼叫的是list類的sort(int index, int count, icomparercomparer)方法,於是繼續追蹤下去,
發現這個方法前面都是一些異常判斷處理,真正的排序方法是呼叫了array類的sort方法,於是繼續追蹤
同樣先是進行異常判斷處理,例項化乙個arraysorthelper.default物件,跟進進去,
發現乙個新的類 createarraysorthelper,根據名字判斷應該是建立陣列排序的幫助類物件,
跳轉到 arraysorthelper類中找到sort方法,可以看到具體實現如下:
紅框內不知道是什麼判斷,追蹤過去是binarycompatibility.s_map.targetsatleast_desktop_v4_5,字面意思看好像是指「二進位制相容性對映的目標至少是桌面v4_5」,講道理,我不是很懂,
但是可以看出list排序走的是else,繼續追蹤:
可以看到主要是呼叫了compare方法,繼續追蹤:
可以看到這裡呼叫了compareto方法,查詢一下這個方法的所有實現,發現如下:
點開其中幾個基本的實現,發現屬於最底層的方法了,於是可以推斷出,如果需要對兩個不同型別的list進行排序,需要重寫compareto方法,
所以只需把其中乙個類繼承icomparable,重寫compareto方法即可。
以上都是推斷,現在寫個**嘗試一下:
首先定義兩個類:
然後寫個控制台測試一下:
執行結果如下:
可以看出,已經成功輸出想要的結果。
C 合併兩個不同型別集合資料
2019 09 30 10 28 46 dear200892 閱讀數 9 文章標籤 c lambda 合併不同型別集合資料 更多 分類專欄 c 別名 使用lambda表示式來實現left join 先把兩個不同的類資料擺上。public class user 區域編號 public int area...
C 模板實現兩個不同型別的資料相加函式
1 最簡單的情況 templatet add const t a,const t b 缺點是不能夠處理不同型別的資料,例如add 100,100.0f 2 第二種情況 templatet1 add1 t1 lhs,t2 rhs 這種情況下,能夠處理不同型別的資料,但是有些情況下有些資料精度會丟失,例...
如何將不同型別的PDF文件進行壓縮變小?
我們日常工作經常接觸很多文件,而目前pdf格式是我們比較常用的一種格式,因而也會將各種其他型別的文件轉成pdf使用,如果生成的pdf太大,不同型別的檔案應該如何壓縮變小呢?一 office生成的pdf文件 比如用福昕pdf編輯器開啟pdf文件後,選擇左上角 檔案 選項卡中的 減少檔案大小 然後根據系...