gpt4 book ai didi

java - 类似: Compare the object on various parameter using compareTo

转载 作者:行者123 更新时间:2023-12-01 09:47:26 26 4
gpt4 key购买 nike

我正在研究比较器和可比接口(interface)之间的差异。

在其他网站上,甚至在 stackoverflow 上,都提到当我们需要对各种字段进行排序时,我们使用了 Comparator。

现在我正在使用这样的Comparable

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

class HDTV implements Comparable<HDTV> {
private int size;
private String brand;
private int price;

public HDTV(int size, String brand, int price) {
this.size = size;
this.brand = brand;
this.price = price;
}


public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public int getSize() {
return size;
}

public void setSize(int size) {
this.size = size;
}

public String getBrand() {
return brand;
}

public void setBrand(String brand) {
this.brand = brand;
}

@Override
public int compareTo(HDTV tv) {

if (this.getSize() > tv.getSize())
return 1;
else if (this.getSize() < tv.getSize())
return -1;
else if (this.getPrice() > tv.getPrice())
return 1;
else if (this.getPrice() < tv.getPrice())
return -1;
else
return 0;
}
}

public class Test {
public static void main(String[] args) {
HDTV tv1 = new HDTV(60, "Samsung", 30000);
HDTV tv2 = new HDTV(60, "Sony", 20000);
HDTV tv3 = new HDTV(50, "LG", 20000);
List<HDTV> l = new ArrayList<>();
l.add(tv1);
l.add(tv2);
l.add(tv3);
Collections.sort(l);
Iterator it = l.iterator();
while (it.hasNext())
System.out.println(((HDTV)it.next()).getBrand());
if (tv1.compareTo(tv2) > 0) {
System.out.println(tv1.getBrand() + " is better.");
} else {
System.out.println(tv2.getBrand() + " is better.");
}
}
}

上面的程序帮助我们首先按尺寸排序,然后按价格排序,这意味着我们也可以使用两个参数进行比较排序。(根据我的理解,这是错误的)。

是的,这段代码可能是错误的,但我无法弄清楚。

我收到了预期的订单。

请帮我解答疑惑。

最佳答案

您在评论中引用的链接指出:

Comparable provides single sorting sequence. In other words, we can sort the collection on the basis of single element such as id or name or price etc.

对比

Comparator provides multiple sorting sequence. In other words, we can sort the collection on the basis of multiple elements such as id, name and price etc.

这里的混淆在于“多重排序序列”这个短语,而且描述也不正确。

他们的意思是,如果您使用 Comparable 接口(interface),那么对象将始终根据 compareTo() 方法中实现的顺序进行排序。基于对象的多个字段,序列可以根据需要变得复杂。

使用Comparator时,您可以动态提供排序规则序列,并且可以实现许多不同的Comparator对象,以不同的方式对集合进行排序。这就是“多重排序序列”的含义。

在这两种情况下,比较的定义可以是简单的,也可以是复杂的,基于单个字段或多个字段。使用多个比较器,您可以以不同的方式对对象进行排序。

在您的示例中,您可以创建一个 Comparator 来按品牌名称排序,再创建一个首先按价格排序,然后按尺寸排序。

至于那个网页,我会找到一个更好的。最好的引用始终是 Oracle 文档。学习阅读 Javadoc,您将始终获得最好的信息。有时可能有点难以阅读,但值得投资。

关于java - 类似: Compare the object on various parameter using compareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872465/

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