比较器内部的返回值实际上是什么意思?
例如 :
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),而不管其输入如何,那么您使用的是错误的。您需要将返回的值建立在传入的值的基础上。想法是,数据结构(或排序器)在需要对两个html" target="_blank">元素进行排序时会调用比较函数,以找出将它们放入的顺序。
值得注意的是,正/负整数值(-1,+ 1)不必为1,它们可以是任何正/负数。返回-1 / + 1是常见的做法。
我试图通过对象属性NodeID排序一个对象,这是一个长类型。 有什么方法可以通过对象属性NodeID对PeerNode的ArrayList进行排序吗??
我读到这些方法返回值的规则是,对于obj1.compareTo(ob2),例如,如果ob2在层次结构中位于ob1之下,则返回值为负值,如果它位于ob1之上,则返回值为正(如果它等于,则返回值为0)。然而,在我的类中,我看到了使用Math.signum在compareTo方法中获得-1(表示负值)和1(表示正值)的示例。 有什么原因吗? 编辑: 以下是我的意思:
问题内容: 我需要编写一个比较器,它采用类型A的对象A和类型B的对象B。这两个对象不是公共对象的扩展。它们的确不同,但是我需要通过其中的通用字段来比较这两个对象。我必须使用比较器接口,因为对象存储在Set中,并且在必须对CollectionUtils执行操作之后。我在Google上搜索了一下,发现了Comparator的解决方案,但只有相同的类型。 我试图朝这个方向实施思考,但是我不知道我是否在正
我需要写一个比较器,取一个a类型的对象a和一个B类型的对象B。这两个对象不是一个公共对象的扩展。他们确实是不同的,但我需要比较这两个对象在它的共同领域。我必须使用比较器接口,因为对象存储在Set中,之后我必须使用CollectionUtils进行操作。我搜索了一点点,我用比较器找到了解决方案,但只有相同的类型。 TXS 附注:我在不同的集合中添加两个对象: 之后我会这样想:
我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和
我怎样才能比较这两个数组,以一种我想返回另一个数组的方式,它包含B中的所有a的值? 返回数组: 来自答案的C#代码: