比较器写在哪里

来源: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 的设计,再来拓展我们的课程代码:)


继续加油!:)

0
2
liuyubobobo
回复
野源新之助
对。因为堆的内部必须对元素进行比较。
2019-12-23
共2条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程