我有一个生成随机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;
}
我知道还有其他方法可以做到这一点,但我认为这会更优雅。如果您不同意,请随时告诉我。我不仅要学习如何编写代码,还要学习如何编写代码。
答案 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类的对象。