gpt4 book ai didi

java - 比较器和比较器接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:26 25 4
gpt4 key购买 nike

当我浏览上述接口(interface)时,在阅读了许多有关同一主题的网站后,我对这些接口(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 也是 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) 并进行了比较。这里的name指的是什么。 排序是如何进行的?我读到它是当前对象,但我们使用 Collections.sort 调用compareTo,而不是使用任何对象。

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

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

如果让每个查询都易于理解,那就太好了。

最佳答案

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

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

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

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

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

关于java - 比较器和比较器接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com