回答
Comparable
是一個由類實現的接口,這些類知道如何將自身與該類的另一個實例進行比較。
Comparator
是用於比較不同類別的兩個實例的接口。
如果您有Person
分類,例如
public class Person implements Comparable<Person> {
private final String firstName;
private final String lastName;
...
public int compareTo(Person that) {
int rv = lastName.compareTo(that.lastName);
if (rv == 0)
rv = firstName.compareTo(that.firstName);
return rv;
}
}
這是按姓氏具有的自然排序,然後按名字的一類,即斯蒂芬·瓊斯談到約翰·史密斯之前。
如果當時就想先名字,然後姓氏,如John Smith所涉及的Stephen Jones之前,你可以使用一個比較
public class PersonComparator implements Comparator<Person> {
public int compare(Person p1, Person p2) {
int rv = p1.getFirstName().compareTo(p2.getFirstName());
if (rv == 0)
rv = p1.getLastName().compareTo(p2.getLastName());
return rv;
}
}
您使用這些對象進行排序,取決於什麼控制你有過類和實例。例如,如果您有一個不實現Comparable
的類,但是您可以對其進行子類化以實現該界面,並且您確信自己將是唯一創建實例的人,則可以使用Comparable
。
但是,一般來說,Comparator
更靈活。
感謝Stephon..Nice的解釋。 – Swapnal
如果您無權訪問源文件,請使用Comparator
對其進行排序。
如果可能的話,你可以擴展類,並用一個新的類,它實現可比,這樣就可以實現的compareTo()。在其他情況下,您可以使用比較器作爲給定的,
class MyComparator implements Comparator<MyClass>{
@Override
public int compare(MyClass o1, MyClass o2) {
return o1.getType().compareTo(o2.getType());
}
}
使用比較器爲您提供了更多所需的定製。
簡單的答案
轉到爲比較。
的兩個概念
(從http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html萃取)
可比
甲可比對象能夠本身與另一個對象進行比較的綜述。類本身必須實現java.lang.Comparable接口,以便能夠比較它的實例。
比較
比較器對象能夠比較兩個不同的對象。該類不是比較它的實例,而是一些其他類的實例。這個比較器類必須實現java.util.Comparator接口。
考慮您現有的類
您的當前課程已經實施。即使它已經有一個可比較的實現,你也不知道這個比較是如何實現的;因此你無法預測你的排序。如果您沒有修改要嘗試排序的類的源,唯一的選擇是使用Comparator。
- 1. 可比較和比較器接口
- 2. 比較器和可比
- 3. Java - 比較器
- 4. 可比比較的Java
- 5. 的Java:可比VS比較
- 6. Java接口比較器靜態比較
- 7. 可比較的Java
- 8. Java PriorityQueue比較器
- 9. Java比較器compareToIgnoreCase
- 10. Java TreeMap比較器
- 11. 比較比較器的utils
- 12. 比較Java和GPars
- 13. 比較器和可比較器有什麼區別?
- 14. 的CompareTo()和比較()比較的方法和可比
- 15. 如何計算比較器/可比較器中的比較次數?
- 16. 適用於可比較和比較器的泛型
- 17. 比較器/排序/可比較的方法和返回值
- 18. 比較器/比較/比較器鏈接問題
- 19. PriorityQueue和比較器
- 20. 比較器和BST
- 21. 的Java 8比較比較並不鏈
- 22. 比較比較Int
- 23. 比較在Java
- 24. 比較的Java
- 25. Java - 比較類?
- 26. Java Array比較
- 27. 可比較的Java實例
- 28. Java通用樹可比較
- 29. Java實現可比較
- 30. 與可比較的Java ArrayList
可能不必做。 javap來查看類是否實現了Comparable。 – Sridhar
可能重複的[何時使用Comparable vs Comparator](http://stackoverflow.com/questions/2266827/when-to-use-comparable-vs-comparator) – BalusC