這個問題在採訪中被問到。問題是爲什麼Strin
g和其他包裝類實現Comparable
而不是Comparator
接口。我試圖解釋Comparator
基本上是提供自定義排序,Comparable
是默認的自然排序順序。同樣從設計原理角度來看,Comparable
緊密耦合且Comparator
鬆散耦合。但是,我無法澄清爲什麼String
實施了Comparable
而不是Comparator
。爲什麼字符串實現可比較而不是比較器接口
回答
字符串執行器Comparable
因爲它們是可以比較的東西。一般來說,實現Comparable
的東西往往具有自然順序,就像你提到的那樣。
A Comparator
是一種比較事物的方式。當你創建一個比較器時,你正在定義一個用來比較事物的方法。你可以讓一個給定類型的比較器以不同的方式進行比較。
我上面提到了一些關於自然排序的內容。是的,但我認爲我們可以通過重寫compareTo()方法來輕鬆修改此順序。我的意思是從實施到實施都有所不同。它不是特定於Comparable或Comparator。字符串是一個可變類,並以這種方式實現,它總是給你自然順序排序。 – RoyalTiger
您可以通過覆蓋compareTo來修改排序,但對於實現Comparable的每個類,只能有一個定義的排序,因爲您必須選擇特定的方式來編寫compareTo。但是,您可以使幾個比較器比較特定類的對象,每個比較器可以定義不同的順序。查看其他可比較的比較問題以獲取更多信息。 – John
- 1. 實現比較器接口
- 2. 我可以使用比較器而不實現可比較嗎?
- 3. 爲什麼整數比較比字符串比較快?
- 4. 可比較和比較器接口
- 5. 比較器爲什麼要實現Serializable?
- 6. 比較器作爲靜態字段 - 接口還是實現?
- 7. 在java中實現比較器接口
- 8. 在android中實現字符串比較
- 9. 我可以調用binarySearch方法而不實現比較器/可比較嗎?
- 10. 與整數比較相比,爲什麼字符串比較如此之快?
- 11. 記錄連接:比較字符串比較器
- 12. 比較器實現
- 13. 字符串比較沒有比較
- 14. 爲什麼這個字符串比較器不能編譯?
- 15. 字符串比較
- 16. 比較字符串
- 17. 比較字符串
- 18. 字符串比較
- 19. 字符串比較
- 20. 字符串比較
- 21. 比較字符串
- 22. 比較字符串
- 23. 字符串比較
- 24. 比較字符串
- 25. 字符串比較
- 26. 比較字符串
- 27. 字符串比較
- 28. 字符串比較
- 29. 字符串比較?
- 30. SQL - 比較字符串,而不是整個字符串
其他半副本:「[何時應該類是Comparable和/或Comparator?](https://stackoverflow.com/questions/1440134)」和「[compare()和compareTo( )?](https://stackoverflow.com/questions/420223)」。不幸的是,對於這個......沒有規範的複製目標問題......只有少量的適度複製的相互複製。 –