2011-06-25 98 views
17

比较器中的返回值实际上是什么意思?比较器的返回值

例如:

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]

请告诉我这说明什么?

+3

通常“0”表示“==”,“1”表示“>”,“-1”表示“<” –

+2

“1”,“-1”和“0”不是类型,而是值。 –

+1

比较器的功能在其文档中有很好的阐述。尝试阅读一点之前,只是问一个问题。 – Dunes

回答

48

返回value(不type,类型为int)告诉来电者(的东西对数据进行排序):

-1 : o1 < o2 
0 : o1 == o2 
+1 : o1 > o2 

如果你总是返回相同的值(-1 O,1)比较器,无论它是什么输入,那么你都没有正确使用它。您需要根据传入的值返回值。想法是数据结构(或分类器)在需要订购两个元素时调用比较函数,以找出将它们放入的顺序。

值得注意的是正/负整数值(-1,+1)不需要是1,它们可以是任何正数/负数。返回-1/+ 1是通常的做法。

0

这是关于需要比较的排序算法。

正确:

class MyComparator implements Comparator<Integer> { 
    public int compare(Integer o1, Integer o2) { 
     return o1.complare(o2); 
    } 
} 
1

你是混乱返回类型返回值。返回类型是int。返回值是在documentation描述:

返回负整数,零,或作为第一个参数 小于,等于,或大于第二个 一个 正整数。

0

根据您希望如何基于此比较器进行排序,您需要在比较器中放置一些逻辑。你比较只会返回0,这意味着等于

class MyComparator implements Comparator { 

    public int compare(Object o1, Object o2) { 
     // TODO Auto-generated method stub 
     return o1.compareTo(o2); 
    } 
} 
+1

我不认为这会编译,因为'对象'没有可比性。 –

1

的比较方法是利用这里是错误的,但对于澄清你的疑问,为什么只有当返回值为0被写入[20] ... ID

你是使用不具有相同值的TreeSet(属性集)。因此,当比较值并返回值为时,Java将它们视为相等并仅保留第一个值。因此,你只能看到一个值。