如何對兩個不同型別的集合進行排序

2022-02-22 05:33:19 字數 1617 閱讀 3417

今天寫**遇到乙個問題,對兩個兩個不同型別的集合進行排序,上網找了一下方法,然後試驗了一下,用隨筆記錄一下整個過程:

對集合進行排序,自然而然就想到了集合的排序方法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文件後,選擇左上角 檔案 選項卡中的 減少檔案大小 然後根據系...