比较器写在哪里
来源:8-6 基于堆的优先队列
野源新之助
2019-12-23
老师比如我在一个堆中存放一些对象(student),那我的比较器是写在堆这个类中还是写在创建对象的那个类中。如果这个对象是Integer又该如何写
写回答
1回答
-
liuyubobobo
2019-12-23
两种方式都可以。
这个课程使用的方式,是写在对象的类中。我们在堆中,直接调用 E 来性的 compareTo 方法,默认用户传来的类型已经实现了 compareTo。
对于 Integer 这种 Java 内置类,本身已经实现了 compareTo(实现了 Comparable 接口),但如果要自定义比较方式的话,不能覆盖 Java 自己的定义,只能借助外部比较器。在 Java 中,就是实现一个 Comparator。
可以在网上搜索一下 Comparator,学习一下。同时,可以研究一下 Java 内置的 PriorityQuueue 的接口。使用 Java 内置的 PriorrityQueue,一种创建方式,就是传入一个比较器(Comparator),用来定义优先队列的比较方式。如果没有定义比较器,就自动使用存储元素的类定义。
在这个课程中,由于以介绍数据结构原理为主,在工程上,我没有考虑的那么全面,否则代码量就太大了。有兴趣的话,可以根据 Java 的设计,再来拓展我们的课程代码:)
继续加油!:)
022019-12-23
相似问题