2016-08-23 96 views
-2

這個問題在採訪中被問到。問題是爲什麼Strin g和其他包裝類實現Comparable而不是Comparator接口。我試圖解釋Comparator基本上是提供自定義排序,Comparable是默認的自然排序順序。同樣從設計原理角度來看,Comparable緊密耦合且Comparator鬆散耦合。但是,我無法澄清爲什麼String實施了Comparable而不是Comparator爲什麼字符串實現可比較而不是比較器接口

+0

其他半副本:「[何時應該類是Comparable和/或Comparator?](https://stackoverflow.com/questions/1440134)」和「[compare()和compareTo( )?](https://stackoverflow.com/questions/420223)」。不幸的是,對於這個......沒有規範的複製目標問題......只有少量的適度複製的相互複製。 –

回答

3

字符串執行器Comparable因爲它們是可以比較的東西。一般來說,實現Comparable的東西往往具有自然順序,就像你提到的那樣。

A Comparator是一種比較事物的方式。當你創建一個比較器時,你正在定義一個用來比較事物的方法。你可以讓一個給定類型的比較器以不同的方式進行比較。

+0

我上面提到了一些關於自然排序的內容。是的,但我認爲我們可以通過重寫compareTo()方法來輕鬆修改此順序。我的意思是從實施到實施都有所不同。它不是特定於Comparable或Comparator。字符串是一個可變類,並以這種方式實現,它總是給你自然順序排序。 – RoyalTiger

+0

您可以通過覆蓋compareTo來修改排序,但對於實現Comparable的每個類,只能有一個定義的排序,因爲您必須選擇特定的方式來編寫compareTo。但是,您可以使幾個比較器比較特定類的對象,每個比較器可以定義不同的順序。查看其他可比較的比較問題以獲取更多信息。 – John