从比较器返回类型

时间:2011-06-25 14:54:43

标签: java

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

例如:

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]

请告诉我这表明了什么?

7 个答案:

答案 0 :(得分:61)

返回value(不是type,类型为int)告诉调用者(排序数据的事物):

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

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

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

答案 1 :(得分:1)

您会混淆返回类型返回值。返回类型为int。返回值在documentation

中描述
  

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

答案 2 :(得分:1)

Comparator documentation - 返回: 第一个参数的负整数,零或正整数小于,等于或大于第二个参数。

答案 3 :(得分:1)

这里利用比较器的方式是错误的,但为了澄清你的疑问,当返回值为0时,为什么只写[20] id ...

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

答案 4 :(得分:0)

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

正确:

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

答案 5 :(得分:0)

根据您希望基于此比较器进行排序的方式,您需要在比较器中放置一些逻辑。您的比较器仅返回0,表示相等

class MyComparator implements Comparator {

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

答案 6 :(得分:0)

PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){
           @Override
           public int compare(Integer o1, Integer o2) {
               if(o1.intValue() > o2.intValue()){
                   return -1;
               }else if(o1.intValue() < o2.intValue()){
                   return 1;
               }
               return 0;
           }
       });
       pq.add(44);
       pq.add(3);
       pq.add(2);pq.add(5); 
System.out.println(pq.poll());
//outpu 44

它会在按降序添加元素时对元素进行排序。它将根据返回值比较两个对象,它将保持顺序。