当前位置: 首页 > 知识库问答 >
问题:

可比和比较器接口

澹台臻
2023-03-14

当我在浏览上面的接口时,在阅读了许多相同主题的站点后,我对这些接口的语法不是很清楚。

请考虑以下代码段:

public class ComparableTest implements Comparable,Comparator {

    String name;
    int age;

    public ComparableTest(String name,int age){
        this.name=name;
        this.age=age;
    }
    @Override
    public int compareTo(Object o){               // line 1
        ComparableTest c=(ComparableTest)o;
        return name.compareTo(c.name);            // line 2
    }
@Override
public int compare(Object o1, Object o2){        // line 4
    ComparableTest c1=(ComparableTest)o1;
    ComparableTest c2=(ComparableTest)o2;
    return return c1.name.compareTo(c2.name);
}

    public static void main(String[] args) {
        ComparableTest ct1=new ComparableTest("Max",23);
        ComparableTest ct2=new ComparableTest("Alex",22);
        ComparableTest ct3=new ComparableTest("Zen",25);
        List lt=new ArrayList();
        lt.add(ct1);
        lt.add(ct2);
        lt.add(ct3);
        Collections.sort(lt);                                 // line 3
        Collections.sort(lt,new ComparableTest("jack",98));   // line 5
    }
}
public int compareTo(Object o) {
     //cast the Object o
     return c1.name.compareTo(c2.name);
}

如果每个查询都是可理解的。

共有1个答案

谢学名
2023-03-14

在第3行中,collections.sort将列表作为参数,compareTo(object o)由列表的对象执行,并将列表的其他对象作为参数。

在第2行name是执行该方法的对象的atribute名称。

当您调用collections.sort(lt)compareTo(Object o)用于执行orderig并由列表中的多个对象以列表中的其他对象作为参数来执行时,它取决于collections.sort()使用的缩短算法。

collections.sort()包含一个参数、一个列表或一个列表和一个比较器。

 类似资料:
  • 我有一个关于比较器接口的问题。在我的类下面实现了按长度而不是按字符值排序的默认排序的接口。 覆盖默认比较后,我使用对我的字符串数组进行排序。即使我覆盖了默认方法,如果我使用Arrays.sort,它会调用默认比较而不是我覆盖的方法。这是因为我显式调用了超类方法吗? 另一个问题是初始化接口本身。我知道您不能初始化接口,而是初始化一个类对象(实现所述接口)来引用接口可用的方法。在这种情况下,当我初始化

  • 问题内容: Comparable和Comparator之间的主要区别是什么。 在什么情况下,哪个比另一个优先? 问题答案: 当你的类实现时,该类的方法将定义该对象的“自然”顺序。根据合同,该方法有义务(尽管不要求)与该对象上的其他方法保持一致,例如,当比较返回true 时,应始终为对象返回0 。 一个比较本身就是如何比较两个对象的定义,可用于可能不与自然顺序排列的方式来比较的对象。 例如,字符串通

  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 问题内容: 假设我有一对班 我希望先按第一个值排序,然后再按第二个值排序。现在,如果我这样做 一切正常,列表按对的第一个值排序,但是如果我这样做 它因错误而失败 好的,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它对compare()而不是compare()。thenComparing()有效? 问题答案: 该错误似乎与的通用参数有关。一种解决方法是尝试使用显式类型: 请注意,

  • 问题内容: 我有一个需要在字段上排序的对象列表,例如“分数”。我不加思索地编写了一个实现Comparator的新类,该类可以完成任务并且可以工作。 现在回头看一下,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。分数是订购对象的唯一字段。 我做的可接受的做法是什么? 正确的方法是“首先让类实现Comparable(用于自然排序),如果需要替代字段比较

  • 我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s