当前位置: 首页 > 面试题库 >

“相互可比”是什么意思?

屠泰平
2023-03-14
问题内容

我读到:

每当需要对集合进行排序时,元素必须相互可比。

我写了下面的代码,它可以正常工作。您能告诉我们b类和c类如何相互可比,“相互可比”是什么意思?

import java.util.ArrayList;
import java.util.Collections;

class b implements Comparable<c> {
    String str1;

    b(String str1) {
        this.str1 = str1;
    }

    public int compareTo(c object) {
        return str1.compareTo(object.str1);
    }
}

class c implements Comparable<b> {
    String str1;

    c(String str1) {
        this.str1 = str1;
    }

    public int compareTo(b object) {
        return str1.compareTo(object.str1);
    }
}

public class a {

    public static void main(String[] args) {
        b obj1 = new b("monster");
        c obj2 = new c("aman");

        ArrayList list  = new ArrayList();
        list.add(obj1);
        list.add(obj2);
        System.out.println("unsorted list = "+list);
        Collections.sort(list);
        System.out.println("sorted list = "+list);
    }
}

问题答案:

为了类AB以可相互比较的,这些需求需要满足:

  • 的通话compareTo上的一个实例,A通过实例B必须允许
  • 的通话compareTo上的一个实例,B通过实例A必须允许
  • 如果a.compareTo(b)返回x,则b.compareTo(a) 必须 返回y具有相反符号或零的值(当x为零时)。

在你的代码中的类不可相互比较,因为试图通过一个实例cbcompareTo(反之亦然)工作正常。但是,它们与它们自己的类的实例不具有可比性,如果您要向要排序的集合中添加更多项,则会产生问题。

为了使容器可排序,您的类也必须与其自身类型的实例相当。



 类似资料:
  • 这可能是有史以来问过的最愚蠢的问题,但我认为对于一个Java新手来说,这相当令人困惑。 有人能澄清什么是不可变的吗 一个很好的例子(在Java中)将非常感谢。

  • 问题内容: 中的类对什么意味着什么?或者总的来说… 问题答案: 序列化将一个对象从内存持久存储到一系列位中,例如保存到磁盘上。反序列化是相反的-从磁盘读取数据以水合/创建对象。 就您的问题而言,它是一个接口,如果在一个类中实现,则该类可以由不同的序列化程序自动进行序列化和反序列化。

  • 我尝试使用Google Search和Stack ;Overflow进行搜索,但没有显示任何结果。我在opensource库代码中看到了这一点: “=”()是什么意思?

  • 问题内容: 我只是想使用Django中的url标记与另一个页面建立简单的连接。我收到“设置对象不可逆”的错误。搜索了一下之后,我一直找不到任何东西。 urls.py admin_view.html 我以前没有遇到过这个问题,而且看起来只是我要解决的一个简单问题。任何帮助表示赞赏。 问题答案: 应该是一个清单。您目前有一套。它应该是: 在模板中,当网址格式名称为字符串时,应使用引号: 如果要使用名称

  • 当使用代码进行扩展时,我得到以下错误,我不确定他们是要求使用不同的操作符还是修改基于互联网搜索的表达式中的值。 错误:%不可用:请改用trunchingRemaider 扩展代码: 设置分钟和秒变量时出错。

  • 问题内容: 哪些类型的对象属于“可订阅”范围? 问题答案: 它基本上意味着对象实现了该方法。换句话说,它描述的是“容器”对象,这意味着它们包含其他对象。这包括字符串,列表,元组和字典。