请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

比较器写在哪里

老师比如我在一个堆中存放一些对象(student),那我的比较器是写在堆这个类中还是写在创建对象的那个类中。如果这个对象是Integer又该如何写

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-12-23 06:45:16

两种方式都可以。


这个课程使用的方式,是写在对象的类中。我们在堆中,直接调用 E 来性的 compareTo 方法,默认用户传来的类型已经实现了 compareTo。


对于 Integer 这种 Java 内置类,本身已经实现了 compareTo(实现了 Comparable 接口),但如果要自定义比较方式的话,不能覆盖 Java 自己的定义,只能借助外部比较器。在 Java 中,就是实现一个 Comparator。


可以在网上搜索一下 Comparator,学习一下。同时,可以研究一下 Java 内置的 PriorityQuueue 的接口。使用 Java 内置的 PriorrityQueue,一种创建方式,就是传入一个比较器(Comparator),用来定义优先队列的比较方式。如果没有定义比较器,就自动使用存储元素的类定义。


在这个课程中,由于以介绍数据结构原理为主,在工程上,我没有考虑的那么全面,否则代码量就太大了。有兴趣的话,可以根据 Java 的设计,再来拓展我们的课程代码:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 野源新之助 #1
    那如果传入的类型没有实现compareTo,在堆这个类里就必须自己定义一个外部比较器是吗
    回复 有任何疑惑可以回复我~ 2019-12-23 07:13:01
  • liuyubobobo 回复 提问者 野源新之助 #2
    对。因为堆的内部必须对元素进行比较。
    回复 有任何疑惑可以回复我~ 2019-12-23 22:59:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信