繁体   English   中英

可比和比较器接口

[英]Comparable and Comparator Interface

当我浏览上述接口时,在阅读了许多有关同一主题的网站后,我对这些接口的语法并不十分清楚。

考虑以下代码片段:

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
    }
}

1)在第3行中,使用list作为参数的Collections.sort(lt)调用以Object为参数的compareTo接受列表lt。 怎么样 ? compareTo是否必须具有一个List作为参数。 我知道List也是Object的类型,但是Object o将如何接受包含某个类实例的List(请排除泛型,因为我现在不知道)

2)假设我调用c1.comapreTo(c2),那么很明显c1是此对象,而c2是另一个要比较的对象。 因此,在comapreTo(Object o)中,以下行非常清晰

public int compareTo(Object o) {
     //cast the Object o
     return c1.name.compareTo(c2.name);
}

但是在第2行中,我只写了name.compareTo(c.name)并进行了比较。 名字在这里指的是什么。 排序如何进行? 我读到它是当前对象,但我们用Collections.sort而不是任何对象来调用compareTo。

3)当第5行调用第4行时,第4行将list lt设为o1,并将新创建的Object设为o2。 我不了解要排序的对象在列表中,然后为什么我们要传递一些不同的对象并与之进行比较,因为它不在列表中,也不会包含在我们的结果中。 这里如何进行分类?

4)我们可以为第5行的第二个参数传递哪些不同的值?

如果使每个查询都可以理解,那将是可理解的。

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

第2行中的name是执行该方法的对象的属性名称。

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

例如,在一个只有两个对象调用collections的列表l中,sort(l)将使compareTo(Object o)由一个以另一个对象为参数的对象执行,并且列表将是有序的。 更大的列表将需要更多的通话。

collections.sort()接受一个参数,一个列表或一个列表和一个Comparator。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM