是否可以在Java中覆盖String compareTo方法?

时间:2012-09-10 16:54:19

标签: java sorting compareto

我有一个生成随机IP地址的类。我必须对此列表进行排序,但我需要使用自己的逻辑来比较两个字符串。

我更喜欢这样做的方法是覆盖compareTo类中的String方法并使用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;
 }

我知道还有其他方法可以做到这一点,但我认为这会更优雅。如果您不同意,请随时告诉我。我不仅要学习如何编写代码,还要学习如何编写代码。

5 个答案:

答案 0 :(得分:21)

您不能覆盖String的compareTo方法,因为该类是最终的。但是you can provide a custom Comparator to Arrays#sort()

答案 1 :(得分:8)

我意识到这并没有以你想要的方式回答你的问题,但听起来我需要一个IP address课而不是String课。否则,您的解决方案将 stringly 键入。

答案 2 :(得分:4)

无法做到。字符串是最终的;没有压倒它。

你的类应该实现自己的compareTo并执行逻辑。

您可以将所有内容封装在自定义类中,也可以实现自定义Comparator。

听起来你犯的是不充分考虑物体的阶级罪。字符串原语不是像这样的自定义逻辑的最佳封装。最好把它全部放在你自己设计的一个对象中。

答案 3 :(得分:1)

您可以尝试在类Arrays中使用以下方法:

public static void sort(T [] a,Comparator c);

e.g。

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

答案 4 :(得分: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类的对象。