4

我有一个生成随机 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;
 }

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

4

5 回答 5

21

您不能覆盖 String 的compareTo方法,因为该类是最终的。但是您可以为Arrays#sort().

于 2012-09-10T16:55:25.010 回答
8

我意识到这并不能以您想要的方式回答您的问题,但在我看来,您需要一个IP 地址类而不是一个String类。否则,您的解决方案将是字符串类型的。

于 2012-09-10T16:58:42.177 回答
4

这是不可能的。字符串是最终的;没有覆盖它。

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

您可以将所有这些封装在自定义类中,也可以实现自定义比较器。

听起来你犯了没有足够考虑对象的类罪。字符串原语不是像这样的自定义逻辑的最佳封装。最好将其全部保存在您自己设计的一个对象中。

于 2012-09-10T16:55:07.787 回答
2

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

公共静态无效排序(T[] a,比较器 c);

例如

Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                            // provide your comparison logic here
                return 0;
            }
        });
于 2012-09-10T17:00:10.193 回答
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 类的对象。

于 2012-09-10T17:21:19.417 回答