从比较器返回类型
比较器内的返回值实际上意味着什么?
例如 :
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-type和return-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); } }