为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Java类应该实现类似的呢?

为什么Java类应该实现类似的呢?

呼唤远方 2019-08-03 07:03:01
为什么Java类应该实现类似的呢?为什么JavaComparable使用?为什么有人要Comparable在课堂上?您需要实现可比较的实际示例是什么?
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这是一个真实的样本。请注意String还实现Comparable.

class Author implements Comparable<Author>{
    String firstName;
    String lastName;

    @Override
    public int compareTo(Author other){
        // compareTo should return < 0 if this is supposed to be
        // less than other, > 0 if this is supposed to be greater than 
        // other and 0 if they are supposed to be equal
        int last = this.lastName.compareTo(other.lastName);
        return last == 0 ? this.firstName.compareTo(other.firstName) : last;
    }}

晚点.。

/**
 * List the authors. Sort them by name so it will look good.
 */public List<Author> listAuthors(){
    List<Author> authors = readAuthorsFromFileOrSomething();
    Collections.sort(authors);
    return authors;}/**
 * List unique authors. Sort them by name so it will look good.
 */public SortedSet<Author> listUniqueAuthors(){
    List<Author> authors = readAuthorsFromFileOrSomething();
    return new TreeSet<Author>(authors);}



查看完整回答
反对 回复 2019-08-05
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞


可比较定义了一个自然的顺序。这意味着当一个对象应该被认为“小于”或“大于”时,定义它。

假设你有一堆整数,你想对它们进行排序。这很容易,只要把它们放在一个分类的集合中,对吗?

TreeSet<Integer> m = new TreeSet<Integer>(); m.add(1);m.add(3);m.add(2);for (Integer i : m)... // values will be sorted

但是现在假设我有一些自定义对象,其中排序对我来说是有意义的,但是还没有定义。比方说,我有用邮政编码和人口密度来表示地区的数据,我想按密度对它们进行排序:

public class District {
  String zipcode; 
  Double populationDensity;}

现在,对这些对象进行排序的最简单方法是通过实现可比较性来用自然顺序来定义它们,这意味着有一种标准的方法来定义这些对象的排序。

public class District implements Comparable<District>{
  String zipcode; 
  Double populationDensity;
  public int compareTo(District other)
  {
    return populationDensity.compareTo(other.populationDensity);
  }}

请注意,您可以通过定义一个比较器来完成等效的事情。不同之处在于,比较器定义了排序逻辑。对象外部..也许在一个单独的过程中,我需要通过邮政编码对相同的对象进行排序-在这种情况下,排序不一定是对象的属性,或者与对象的自然排序不同。您可以使用外部比较器来定义对整数的自定义排序,例如通过按字母顺序对它们进行排序。

基本上,排序逻辑必须存在于某个地方。可能是-

  • 在对象本身中,如果它是自然可比较的(扩展可比较性)。整数)

  • 在外部比较器中提供,如上面的示例所示。




查看完整回答
反对 回复 2019-08-05
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

引用javadoc;

此接口对实现该接口的每个类的对象强制执行总体排序。这种排序称为类的自然排序,类的比较方法称为自然比较法。

实现此接口的对象的列表(和数组)可以通过Collection s.Sort(和Arrays.Sort)自动排序。实现此接口的对象可以用作排序映射中的键或排序集中的元素,而无需指定比较器。

编辑:.,并使重要的一点大胆。




查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 271 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号