实现Comparator 排序时异常 本帖最后由 surongr 于 2012-07-09 02:45:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是必须的, __9_7_Person这个只是一个comparator比较器,而Arrays.sort 是对 comparable 类进行排序的。你把概念搞混淆了,应该实现 comparable 接口,重写 compareTo()方法 是继承Comparable接口并重写compareTo方法 接口comparator是比较器,Comparable才能实现自然比较另外类名最好不要以下划线开头 3楼说得对。你把comparator和Comparable搅浑了。 可是以前写了一个实现Comparator<String>的 后来也用了 Arrays.sort 对一个 String[] 排序 String 已经实现了comparable 接口 关于Arrays.sort(Object[])其实可以按照指定的排序规则进行排序,默认情况下按照自然顺序(即对象实现了compareble接口,Arrays回调compareble的compare方法进行排序),但是Arrays也支持用户指定比较规则进行排序,就是sort(T[] a, Comparator<? super T> c)这个静态方法(详见API)修改了了下楼主的代码如下:package sortutil.test;import java.util.Arrays;import java.util.Comparator;public class __9_7_Person implements Comparator<__9_7_Person> { private int height; private int weight; public __9_7_Person(int height, int weight) { this.height = height; this.weight = weight; } public int compare(__9_7_Person p1, __9_7_Person p2) { if (p1.height != p2.height) { return p1.height - p2.height; } else { return p1.weight - p2.weight; } } public String toString(){ return "\nHeigth:"+height +"||"+"Weight:"+weight; } public static void main(String[] args) { __9_7_Person[] p = {new __9_7_Person(60, 100), new __9_7_Person(70, 150), new __9_7_Person(56, 90), new __9_7_Person(75, 190), new __9_7_Person(60, 95), new __9_7_Person(68, 110), }; Arrays.sort(p,new __9_7_Person(0,0));//new __9_7_Person(0,0)被转成comparator System.out.println(Arrays.toString(p)); }}楼主注意Java命名规则,虽无强制,但遵循好处多多 _9_7_Person这个只是一个comparator比较器,而Arrays.sort 是对 comparable 类进行排序的。你把概念搞混淆了,应该实现 comparable 接口,重写 compareTo()方法 初学者:配置环境PATH CLASSPATH JAVA_HOME 如何程序中捕获异常,查看异常抛出的位置或不捕获异常,将异常往上传递。 一个很变态但又实用的多线程问题(有兴趣高手们请进啊) java传参数给迅雷(URL),然后调用迅雷来下载 native2ascii.exe 谁有办法把字符串里的式子执行了 明天复试,继续来点意见 鼠标事件!!! 监视外部进程执行结束的一段代码,问题在哪里? javamail附件中文名的奇怪问题(不是iso8859 -> gb2312那么简单哦)!! 求解Java问题 指点迷津----nio服务器架构问题
你把概念搞混淆了,应该实现 comparable 接口,重写 compareTo()方法
并重写compareTo方法
另外类名最好不要以下划线开头
修改了了下楼主的代码如下:package sortutil.test;
import java.util.Arrays;
import java.util.Comparator;
public class __9_7_Person implements Comparator<__9_7_Person> {
private int height;
private int weight;
public __9_7_Person(int height, int weight) {
this.height = height;
this.weight = weight;
}
public int compare(__9_7_Person p1, __9_7_Person p2) {
if (p1.height != p2.height) {
return p1.height - p2.height;
}
else {
return p1.weight - p2.weight;
}
}
public String toString(){
return "\nHeigth:"+height +"||"+"Weight:"+weight;
}
public static void main(String[] args) {
__9_7_Person[] p = {new __9_7_Person(60, 100),
new __9_7_Person(70, 150),
new __9_7_Person(56, 90),
new __9_7_Person(75, 190),
new __9_7_Person(60, 95),
new __9_7_Person(68, 110),
};
Arrays.sort(p,new __9_7_Person(0,0));//new __9_7_Person(0,0)被转成comparator
System.out.println(Arrays.toString(p));
}
}楼主注意Java命名规则,虽无强制,但遵循好处多多
你把概念搞混淆了,应该实现 comparable 接口,重写 compareTo()方法