關於java比較器

2021-07-14 08:16:59 字數 1006 閱讀 3221

最近由於需要用到集合去給集合中的元素排序,需要用到比較器,所以對比較器做下小的總結。問題的產生很簡單,就是需要根據乙個高維的變數對資料進行排序,例如:

中的資料是乙個有六個維度的資料集,需要根據從第一維開始到第六維有序排序,自讓而然需要使用到比較器,首先看類的定義:

class quads implements comparator

if(flag<6)

return o1.length[flag]-o2.length[flag];

else

}}

其實類中就包含乙個變數int

length

=new

int[

6];這裡是六維,所以在比較器中我們定義乙個變數flag,作為具有相同數值維度的標記,如果flag小於5,說明資料還不到第六維就已經出現不相同的資料了,flag等於5說明資料一直到第5維都是相等的,這時候我們只要判斷第五維的資料的大小就可以,這種方法可以減小**冗餘,例如以下的寫法:

class quads implements comparator

else if(o1.length[0]>o2.length[0])elseelse if(o1.length[1]>o2.length[1])elseelse if(o1.length[2]>o2.length[2])elseelse if(o1.length[3]>o2.length[3])elseelse if(o1.length[4]>o2.length[4])elseelse if(o1.length[5]>o2.length[5])else}}

}}}

}}

此種寫法一看**的冗餘度好高,從第一維開始到第六維明明做同一件事情,卻要不同的書寫,不推薦。

總結,關於物件比較器的書寫,可以根據具體條件來定,但是一定要做到盡力減小**冗餘度。

java比較器的復用

部落格主頁 設想這麼一種場景 a有n個字段,也有專門對a的比較函式。每一次比較函式,在n多個業務線復用。那麼,問題來了,突然有一天a多加了乙個欄位in,而且在原一特定場景中這個欄位比其它所有欄位的優先順序都應該高。在其它場景中又沒有影響。該怎麼解決這個問題?1.重寫原有的所有的comparator類...

java物件比較器和轉殖

一.比較器comparable和comparator public class mystring person b arrays.sort a for int i 0 i system.out.print a i system.out.print r n arrays.sort b for int ...

java物件比較器和轉殖

一.比較器comparable和comparator public class mystring person b arrays.sort a for int i 0 i程式執行結果 我們發現string可以呼叫arrays.sort 函式,而我們自定義的person類報錯,看錯誤的關鍵字compa...