2012-09-10 78 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

相关问题