物件排序之Comparator,Comparable介面區別(華為面試題)
阿新 • • 發佈:2019-02-05
給了個類,要求編寫一段程式碼,給以下型別的資料排序(按index降序排):
public class A{
public int index ;
public String str;
public …… ;
}
條件:
1.資料量很大,要求效能夠;
2.擴充套件性好:按其他資料型別(如 String str,……)排序的時候,不需要修改元件,以後還可能增加其他型別的資料。
(提示:可以呼叫現成的java.util包中的排序.)
物件排序之Comparator,Comparable介面區別:
1.comparable是通用的介面,使用者可以實現它來完成自己特定的比較,而comparator可以看成一種演算法的實現,在需要容器集合 collection需要比較功能的時候,來指定這個比較器,這可以看出一種設計模式( 策略模式Strategy),將演算法和資料分離,就像C++
STL中的函式物件一樣。
2.前者應該比較固定,和一個具體類相繫結,而後者比較靈活,它可以被用於各個需要比較功能的類使用。可以說前者屬於“靜態繫結”,而後者可以“動態繫結”。
3.一個類實現了Camparable介面表明這個類的物件之間是可以相互比較的。如果用數學語言描述的話就是這個類的物件組成的集合中存在一個全序。這樣,這個類物件組成的集合就可以使用Sort方法排序了。
4.而Comparator的作用有兩個:
a,如果類的設計師沒有考慮到Compare的問題而沒有實現Comparable介面,可以通過Comparator來實現比較演算法進行排序
b,可以更加靈活實現排序規則,為了使用不同的排序標準做準備,比如:升序、降序,或者將來想通過類的其他欄位進行排序
public class A{
public int index ;
public String str;
public …… ;
}
條件:
1.資料量很大,要求效能夠;
2.擴充套件性好:按其他資料型別(如 String str,……)排序的時候,不需要修改元件,以後還可能增加其他型別的資料。
(提示:可以呼叫現成的java.util包中的排序.)
物件排序之Comparator,Comparable介面區別:
1.comparable是通用的介面,使用者可以實現它來完成自己特定的比較,而comparator可以看成一種演算法的實現,在需要容器集合 collection需要比較功能的時候,來指定這個比較器,這可以看出一種設計模式(
2.前者應該比較固定,和一個具體類相繫結,而後者比較靈活,它可以被用於各個需要比較功能的類使用。可以說前者屬於“靜態繫結”,而後者可以“動態繫結”。
3.一個類實現了Camparable介面表明這個類的物件之間是可以相互比較的。如果用數學語言描述的話就是這個類的物件組成的集合中存在一個全序。這樣,這個類物件組成的集合就可以使用Sort方法排序了。
4.而Comparator的作用有兩個:
a,如果類的設計師沒有考慮到Compare的問題而沒有實現Comparable介面,可以通過Comparator來實現比較演算法進行排序
b,可以更加靈活實現排序規則,為了使用不同的排序標準做準備,比如:升序、降序,或者將來想通過類的其他欄位進行排序