实现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()方法 我该学些什么,java web 高手请回答一下 一个编程方面的小技巧,大家来看一下~~~ 关于引用的存储问题 C/S模式应用的默认编码是什么? 怎样实现弹出一个已经做好的界面? 标题:java中这样的问题如何解决,希望大家不吝赐教!!! 高手请进,applet 与 servlet 通讯问题 关于swing进度条JProgressBar颜色设置无效 JAVA初学的困惑,简单问题啊!! Java开发工具比较》》》 求解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()方法