从比较器返回类型

比较器内的返回值实际上意味着什么?

例如 :

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 

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

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

你混淆了return-typereturn-value 。 return类型是int 。 返回值在文档中描述:

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

比较器文档 – 返回:负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。

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

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

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

正确:

 class MyComparator implements Comparator { 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); } }