比较器的返回值
问题描述:
比较器中的返回值实际上是什么意思?比较器的返回值
例如:
class TreeSetDemo
{
public static void main(String arg[])
{
TreeSet t=new TreeSet(new MyComparator());
t.add(new Integer(20));
t.add(new Integer(10));
t.add(new Integer(30));
t.add(new Integer(100));
System.out.println(t);
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
return 0;
}
}
}
如果返回类型为1,则其实际上返回
[20,10,30,100]
如果返回类型是-1,则其实际返回
[100,30,10,20]
如果返回类型为0,那么它实际上返回
[20]
请告诉我这说明什么?
答
返回value
(不type
,类型为int
)告诉来电者(的东西对数据进行排序):
-1 : o1 < o2
0 : o1 == o2
+1 : o1 > o2
如果你总是返回相同的值(-1 O,1)比较器,无论它是什么输入,那么你都没有正确使用它。您需要根据传入的值返回值。想法是数据结构(或分类器)在需要订购两个元素时调用比较函数,以找出将它们放入的顺序。
值得注意的是正/负整数值(-1,+1)不需要是1,它们可以是任何正数/负数。返回-1/+ 1是通常的做法。
答
这是关于需要比较的排序算法。
正确:
class MyComparator implements Comparator<Integer> {
public int compare(Integer o1, Integer o2) {
return o1.complare(o2);
}
}
答
根据您希望如何基于此比较器进行排序,您需要在比较器中放置一些逻辑。你比较只会返回0,这意味着等于
class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
}
+1
我不认为这会编译,因为'对象'没有可比性。 –
答
的比较方法是利用这里是错误的,但对于澄清你的疑问,为什么只有当返回值为0被写入[20] ... ID
你是使用不具有相同值的TreeSet
(属性集)。因此,当比较值并返回值为零时,Java将它们视为相等并仅保留第一个值。因此,你只能看到一个值。
通常“0”表示“==”,“1”表示“>”,“-1”表示“
“1”,“-1”和“0”不是类型,而是值。 –
比较器的功能在其文档中有很好的阐述。尝试阅读一点之前,只是问一个问题。 – Dunes