是否可以覆盖字符串';Java中的compareTo方法?
我有一个生成随机IP地址的类。我必须对这个列表进行排序,但我需要使用自己的逻辑来比较这两个字符串 我更愿意这样做的方式是重写是否可以覆盖字符串';Java中的compareTo方法?,java,sorting,compareto,Java,Sorting,Compareto,我有一个生成随机IP地址的类。我必须对这个列表进行排序,但我需要使用自己的逻辑来比较这两个字符串 我更愿意这样做的方式是重写String类中的compareTo方法,并使用Arrays.sort()方法,但我不知道这是否可行 我以前已经重写了compareTo方法,但我总是让它比较同一类中的实例变量 /* Sorts array in ascending order * * @param ips An array of IP Addresses * @return
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;
}
我知道还有其他方法可以做到这一点,但我认为这会更优雅。如果你不同意,请随时告诉我。我不仅在努力学习如何编码,而且在努力学习如何很好地编码 这是办不到的。字符串是最终的;没有什么可以替代它 您的类应该实现自己的compareTo并执行逻辑 您可以将其全部封装在自定义类中,也可以实现自定义比较器
听起来你犯了类罪,没有充分考虑对象。对于这样的自定义逻辑,字符串原语不是最好的封装。最好将其保存在您自己设计的一个对象中。您不能重写String的
compare to
方法,因为类是最终的。但是。我意识到这并不能以你想要的方式回答你的问题,但在我看来,你需要的是一个类,而不是一个字符串类。否则,您的解决方案将被严格类型化。您可以尝试在类数组中使用以下方法:
公共静态无效排序(T[]a,比较器c)
e、 g
Arrays.sort(arr,新的比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
//在这里提供您的比较逻辑
返回0;
}
});
您需要实现Comparable接口和compareTO(对象)方法
类IP实现了可比较的{
字符串ip;
IP(字符串IP){
这个.ip=ip
}
字符串getIP(字符串ip){
返回ip;
}
公共int比较(IP){
返回ip.compareTo(ip.getIP());
}
}
现在您可以调用Collection.sort(object_ip)并传递ip类的对象。这肯定比我的答案更好。我明白了。我一定会记住这一点,但是对于这个任务,我们打算使用字符串……注意,覆盖compareTo
来改变行为(几乎)是没有意义的。尤其是a.compareTo(b)
vsb.compareTo(a)
其中a
和b
具有不同的行为。对象为字符串类型。不过我让它工作了,谢谢!
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// provide your comparison logic here
return 0;
}
});
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());
}
}