Java 中按多個欄位排序
對資料進行排序是Java 中的一項常見任務,尤其是在處理複雜對象時。當按多個欄位排序時,操作順序變得至關重要。讓我們考慮一個場景:
挑戰:
給定一個具有年齡和名稱屬性的Person 物件數組,如何按名稱的字母順序排序該數組,然後按年齡排序?什麼演算法適合這個任務?
解:
為了按多個欄位對物件集合進行排序,Java 提供了 Collections.sort。這可以使用比較器來定義排序邏輯來實現。以下是實現它的方法:
private static void order(List<Person> persons) { Collections.sort(persons, new Comparator() { public int compare(Object o1, Object o2) { String x1 = ((Person) o1).getName(); String x2 = ((Person) o2).getName(); int sComp = x1.compareTo(x2); if (sComp != 0) { return sComp; } Integer x1 = ((Person) o1).getAge(); Integer x2 = ((Person) o2).getAge(); return x1.compareTo(x2); }}); }
此排序演算法首先比較物件的名稱。如果名字相同,則會比較他們的年齡。 CompareTo 方法用於字串和整數比較。
演算法:
這裡使用的演算法是合併排序和快速排序的混合。 Collections.sort 使用 Timsort 的變體,這是一種高效的混合排序演算法,它利用了數組按名稱部分排序的事實。
結果:
執行 order 方法後,提供的 Person 物件清單將按姓名字母順序排序,然後按年齡排序。
以上是如何按多個欄位(名稱然後年齡)對 Java 物件陣列進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!