2012-09-10 111 views
4

我有一個類可以生成隨機IP地址。我必須對這個列表進行排序,但我需要使用自己的邏輯來比較兩個字符串。是否有可能在Java中重寫String的compareTo方法?

我更喜歡這樣做的方式是覆蓋String類中的compareTo方法並使用Arrays.sort()方法,但我不知道這是否可行。

我已經覆蓋了compareTo方法,但我一直只是在相同的類中比較實例變量。

/* Sorts array in ascending order 
* 
* @param ips  An array of IP Addresses 
* @return   A sorted array of IP Addresses 
*/ 
public String[] sort(String[] ips) 
{ 
    String[] arr = ips; 

    Arrays.sort(arr); 

    return arr; 
} 

我知道還有其他方法可以做到這一點,但我認爲這樣會更優雅。如果您不同意,請隨時通知我。我正在努力學習如何編寫代碼,而不是如何編寫代碼。

+0

請注意,它(幾乎)無視重寫'compareTo'來改變行爲。特別是'a.compareTo(b)'vs'b.compareTo(a)''''''''''''和'b'具有不同的行爲。 –

回答

4

不能這樣做。字符串是最終的;沒有壓倒一切。

這是你的類應該實現自己的compareTo並執行邏輯。

您可以將其全部封裝在自定義類中或實現自定義比較器。

聽起來就像你犯的類沒有考慮足夠的對象。字符串原語不是像這樣的自定義邏輯的最佳封裝。最好把它全部放在你自己設計的一個對象中。

+1

我明白了。我一定會記住這一點,但對於這項任務,我們打算使用字符串... – jacky

8

我意識到這並不能以您想要的方式回答您的問題,但聽起來像您需要IP address班而不是String班。否則你的解決方案將是字符串鍵入。

+1

這絕對是比我的答案更好的方法。 – assylias

+3

字符串鍵入+1! – Averroes

1

你可以嘗試在課堂上對數組使用下面的方法:

公共靜態無效的排序(T []一,比較器C);

例如

Arrays.sort(arr, new Comparator<String>() { 
      @Override 
      public int compare(String o1, String o2) { 
          // provide your comparison logic here 
       return 0; 
      } 
     }); 
0

您需要實現Comparable接口並實現compareTO(Object)方法。

class IP implements Comparable<IP>{ 
    String ip; 
    IP(String ip){ 
     this.ip=ip 
     } 

    String getIP(String ip){ 
    return ip; 

    } 

public int compareTo(IP){ 
return ip.compareTo(ip.getIP()); 
} 

} 

現在您可以調用Collection.sort(object_ip)並傳遞IP類的對象。

+0

該對象的類型爲String。我知道它工作,謝謝! – jacky

相關問題